10

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

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

SQLServer2012からSQLServer2008R2データベースにアクセスしているためだと思います。データベースをSQLServer2012形式に変換する方法はありますか?または、パフォーマンスの100倍の速度低下を説明する可能性のある他の何かが起こっていますか?

4

5 に答える 5

19

データベースの互換モードを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;
于 2012-04-22T22:30:10.707 に答える
2

回答で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
于 2014-02-17T10:29:38.023 に答える
1

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

于 2013-05-07T16:17:36.247 に答える
0

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

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

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

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

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

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

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

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

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

于 2013-10-16T18:27:13.990 に答える
-4

これは正しい方向に進んでいますか:

http://msdn.microsoft.com/en-us/library/ms189625.aspx

USE master;
GO
CREATE DATABASE MyDatabase 
    ON (FILENAME = 'C:\MySQLServer\MyDatabase.mdf'),
    (FILENAME = 'C:\MySQLServer\Database.ldf')
    FOR ATTACH;
GO
于 2012-04-22T22:25:16.093 に答える