SQL Server 2008 R2の既存のデータベースにfilestreamを実装しました。私が実行した場合WHERE句のFilestream列がサーバーをロックします
CREATE TABLE [dbo].[Table1](
[Id] [int] IDENTITY(1,1),
[rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[Image] [varbinary](max) FILESTREAM NULL,
CONSTRAINT [PK_Table1] 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],
CONSTRAINT [Table1RowguidUnique] UNIQUE NONCLUSTERED
(
[rowguid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[Table1] ADD CONSTRAINT [DF_table1_rowguid] DEFAULT (newid()) FOR [rowguid]
GO
ALTER TABLE dbo.Table1
SET (FILESTREAM_ON = fsfg_LiveWebsite)
GO
:このような非常に単純なテーブルで
:私のサイトは現在、実質的にダウンしているとして今
私は非常に緊急の問題を抱えている
select * from Table1 where Id = 1
それを非常に迅速に実行され、正しい結果が得られます。 where句の "Varbinary(max)FILESTREAM"フィールドで何かを実行すると、テーブル全体がロックダウンします。 だから例えば、これらの2つのいずれかのクエリ:
select Id from Table1 where Id = 1 and [Image] is null
select Id from Table1 where Id = 1 and [Image] = convert(varbinary(max), 'a')
これは何だろうか?
お気軽にご返信ください。
はあなたに
ブロックされている間に 'sys.dm_os_waiting_tasks'を見ると、待ち時間の種類とリソースは何ですか? –
サイトに実装する前にこれをテストしましたか?また、質問の用語を更新することをお勧めします。これは、ファイルストリームの列ではなく、「VARBINARY」列です。 –
@MartinSmith dm_os_waiting_tasksと待機タイプは、実行中に再度照会すると連続的に変化します。 PREEMPTIVE_OS_GETFILESIZE、0/PREEMPTIVE_OS_FILEOPS、0/PREEMPTIVE_OS_CREATEFILE、2 /(結果なし)/ PREEMPTIVE_OS_CLOSEHANDLE、0 – Durden81