web-dev-qa-db-ja.com

画像のvarbinary(max)データをデータベーステーブルに格納するためのベストプラクティスは何ですか?

それぞれ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アルゴリズム を使用しているため、ほとんどの場合、新しい行が最後に追加されます。

ロックと競合のため、多くのプロセスがこのテーブルに挿入しようとすると問題が発生しました。クエリは、ロックの待機からタイムアウトになります。

このテーブルを独自のファイルグループとドライブに移行する必要がありますか?このような状況で挿入パフォーマンスを向上させ、競合を減らすにはどうすればよいですか?

7

挿入が互いに競合しないようにIDの生成を変更するか、ALLOW_PAGE_LOCKS = OFFの設定を検討して、インデックスのメンテナンスに 含意 に注意してください(これはおそらく、更新も行う場合にのみ関連します) )

FILESTREAMについて言及されたので、SQL Server 2008を使用していると思います。ボトルネックとは何かを推測して改善する方法の代わりに、拡張イベントを使用してそれを特定し、負荷テストを行う必要があります[http://www.datamanipulation.net/sqlquerystress /]このアクティビティについて。

http://blogs.technet.com/b/sqlos/archive/2008/07/18/debugging-slow-response-times-in-sql-server-2008.aspx

ボトルネックを特定したら、解決策を見つけることは常に簡単で、正確で、適切なお金で行われます。

4
Sankar Reddy