それぞれ16〜100 KBのサイズのイメージを格納するテーブルがあります。画像が非常に小さいため、 Microsoftのアドバイス を使用し、FILESTREAMデータ型を使用しませんでした。テーブルは簡単に構成されます:
CREATE TABLE Screenshot(
Id bigint NOT NULL,
Data varbinary(max) NOT NULL,
CONSTRAINT PK_Screenshot PRIMARY KEY CLUSTERED
(
Id ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
テーブルは(過去1週間で200万レコード)に頻繁に挿入され、めったに選択されません。キーは hiloアルゴリズム を使用しているため、ほとんどの場合、新しい行が最後に追加されます。
ロックと競合のため、多くのプロセスがこのテーブルに挿入しようとすると問題が発生しました。クエリは、ロックの待機からタイムアウトになります。
このテーブルを独自のファイルグループとドライブに移行する必要がありますか?このような状況で挿入パフォーマンスを向上させ、競合を減らすにはどうすればよいですか?
挿入が互いに競合しないようにIDの生成を変更するか、ALLOW_PAGE_LOCKS = OFF
の設定を検討して、インデックスのメンテナンスに 含意 に注意してください(これはおそらく、更新も行う場合にのみ関連します) )
FILESTREAMについて言及されたので、SQL Server 2008を使用していると思います。ボトルネックとは何かを推測して改善する方法の代わりに、拡張イベントを使用してそれを特定し、負荷テストを行う必要があります[http://www.datamanipulation.net/sqlquerystress /]このアクティビティについて。
ボトルネックを特定したら、解決策を見つけることは常に簡単で、正確で、適切なお金で行われます。