web-dev-qa-db-ja.com

SQL Server 2008R2データベースをSQLServer 2012に変換する方法は?

SQL Server 2012をインストールし、SQL Server 2008R2によって最初に生成されたデータベースを接続しました。

すべてが完全に機能しているように見えましたが、1つの問題がありました。マージが1秒あたり1000から10に低下しました(100倍の速度低下)。

SQL Server2012からSQLServer 2008 R2データベースにアクセスしているためだと推測しています。データベースをSQLServer 2012形式に変換する方法はありますか?それとも、パフォーマンスが100倍遅くなることを説明する可能性のある他の何かが起こっていますか?

10
Contango

データベースの互換モードを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;
18
Aaron Bertrand

回答で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
2
James Anderson

データベースをデタッチおよびアタッチするときは、統計を更新する必要があります。そうしないと、クエリプランナーは効率的な実行プランを生成できず、実行時間が長くなります。これが私が気づいたことです。

1
Lazy_writer

LocalDBを使用するようにデータベースファイルをアップグレードするには:

1.サーバーエクスプローラーで、[データベースに接続]ボタンを選択します。

2. [接続の追加]ダイアログボックスで、次の情報を指定します。

データソース:Microsoft SQL Server(SqlClient)

サーバー名:(LocalDB)\ v11.0

データベースファイルを添付します。Path。ここで、Pathはプライマリ.mdfファイルの物理パスです。

論理名:名前。ここで、名前はファイルで使用する名前です。

[OK]ボタンを選択します。

プロンプトが表示されたら、[はい]ボタンを選択してファイルをアップグレードします。

0
Hemant Malasi