SQL Server 2012をインストールし、SQL Server 2008R2によって最初に生成されたデータベースを接続しました。
すべてが完全に機能しているように見えましたが、1つの問題がありました。マージが1秒あたり1000から10に低下しました(100倍の速度低下)。
SQL Server2012からSQLServer 2008 R2データベースにアクセスしているためだと推測しています。データベースをSQLServer 2012形式に変換する方法はありますか?それとも、パフォーマンスが100倍遅くなることを説明する可能性のある他の何かが起こっていますか?
データベースの互換モードを110に設定し、統計を更新してください。
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 110;
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += CHAR(13) + CHAR(10) + 'UPDATE STATISTICS '
+ QUOTENAME(SCHEMA_NAME(schema_id))
+ '.' + QUOTENAME(name) + ' WITH FULLSCAN;'
FROM sys.tables;
PRINT @sql;
--EXEC sp_executesql @sql;
回答でSQLを実行すると、nvarcharがオーバーフローしました。問題は、データベースにテーブルが多すぎる場合、SQLがnvarcharに対して長すぎることです。私のデータベースには、varcharをオーバーフローさせるのに十分なテーブルがありました(nvarcharの2倍の長さ)。そこで、SQLを編集して、各テーブルをループし、個別のステートメントを実行しました。このようにして、テーブルの統計情報の更新を見逃すことはありません。
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 110;
DECLARE @SQL NVARCHAR(MAX) = N'';
Declare @Tables table
([Schema] nvarchar(50)
,[TableName] nvarchar(100))
Insert into @Tables
Select QUOTENAME(SCHEMA_NAME(schema_id)),QUOTENAME(name)
FROM sys.tables;
Declare @Schema nvarchar(50), @TableName nvarchar(100)
While Exists(Select * From @Tables)
Begin
Select Top 1 @Schema = [Schema], @TableName = [TableName] From @Tables
Set @SQL = 'UPDATE STATISTICS ' + @Schema + '.' + @TableName + ' WITH FULLSCAN;'
Begin Try
EXEC SP_ExecuteSql @SQLToExecute = @SQL
Print 'Completed: ' + @SQL
End Try
Begin Catch
DECLARE @ErrMsg nvarchar(4000)
SELECT @ErrMsg = SubString(ERROR_MESSAGE(),0,900)
Select GetDate(), 'Failed updating stats on ' + @Schema + ' ' + @TableName + '. Error: '+@ErrMsg
End Catch
Delete From @Tables Where [Schema] = @Schema and [TableName] = @TableName
End
データベースをデタッチおよびアタッチするときは、統計を更新する必要があります。そうしないと、クエリプランナーは効率的な実行プランを生成できず、実行時間が長くなります。これが私が気づいたことです。
LocalDBを使用するようにデータベースファイルをアップグレードするには:
1.サーバーエクスプローラーで、[データベースに接続]ボタンを選択します。
2. [接続の追加]ダイアログボックスで、次の情報を指定します。
データソース:Microsoft SQL Server(SqlClient)
サーバー名:(LocalDB)\ v11.0
データベースファイルを添付します。Path。ここで、Pathはプライマリ.mdfファイルの物理パスです。
論理名:名前。ここで、名前はファイルで使用する名前です。
[OK]ボタンを選択します。
プロンプトが表示されたら、[はい]ボタンを選択してファイルをアップグレードします。