Sqlserver推奨パラメータ構成およびログ収縮の問題
4189 ワード
最近不定期にプロジェクトフィードバックが周期的なシステム全体の性能低下状況があり、データベース環境、パラメータ構成の不良による分析がある.例えば、sqlserverログファイルはデフォルトでパーセントで増加し、ログファイルが比較的大きい場合、拡張するたびに時間がかかり、システム全体がカートンします.また、ログ・バックアップを専門に行わなければ、ログとデータベースを縮小する際にログ・サイズを著しく低下させることはなく、完全なバックアップのたびに大きくなり、バックアップ時間が長くなるなどします.
いくつかの比較基礎、共通の配置を簡単に整理します.
1.推奨されるsqlserverバージョン(x 64):sqlserver 2008以降
2.最小メモリと最大メモリを物理メモリの80%に統一する
3.データとログファイルの初期サイズはそれぞれ10 Gと2 Gに設定し、いずれも固定200 Mサイズで増加するように設定し、最大値を制限しない.
4.Tempdbデータベースのリカバリモードは簡単に設定し、データとログファイルの初期サイズはそれぞれ2 Gと1 Gに設定し、いずれも固定200 Mサイズで増加し、最大値を制限しないように設定する.
5.Tempdbのデータファイルの個数=データベースサーバーのCPU数、すべてのデータファイルの初期サイズと増分は一致しなければならなくて、データファイルの個数は4個を超えないでください;
6.最大並列度を1、または並列のオーバーヘッドバルブ値を100に設定する(適宜設定)
7.データベースの完全なバックアップ後、ログのバックアップを1つ行い、ログの縮小を行う必要があります.
通常、完全なバックアップが完了したら、ログバックアップを実行し、ログファイルの縮小を行う必要があります.ログのバックアップを行った後に記録が切断されるだけで、完全なバックアップや差異のバックアップだけを行っても、ログの縮小は効果的ではありません.
操作手順は次のとおりです.
ログをバックアップしない場合は、ログを直接切断します(推奨されません).次の2つの方法があります.
1.nul仮想ファイルにログを書き込む(SQL Serverの場合、nulは他の実際に存在するファイルと同様に、SQL SERVERはすべてのアクティブなログをスキャンし、そのログをフォーマットしてnulファイルに書き込む)
2.データベースを単純なリカバリ・モードに変更した後、完全なリカバリ・モードに変更
SQL 2005のWITH TRUNCATE_ONLYオプションは、同じ効果を発揮します.単純なリカバリモードで実行すると、すべてのアクティブなログはcheckpoint後に破棄されます.
推奨構成
いくつかの比較基礎、共通の配置を簡単に整理します.
1.推奨されるsqlserverバージョン(x 64):sqlserver 2008以降
2.最小メモリと最大メモリを物理メモリの80%に統一する
3.データとログファイルの初期サイズはそれぞれ10 Gと2 Gに設定し、いずれも固定200 Mサイズで増加するように設定し、最大値を制限しない.
4.Tempdbデータベースのリカバリモードは簡単に設定し、データとログファイルの初期サイズはそれぞれ2 Gと1 Gに設定し、いずれも固定200 Mサイズで増加し、最大値を制限しないように設定する.
5.Tempdbのデータファイルの個数=データベースサーバーのCPU数、すべてのデータファイルの初期サイズと増分は一致しなければならなくて、データファイルの個数は4個を超えないでください;
6.最大並列度を1、または並列のオーバーヘッドバルブ値を100に設定する(適宜設定)
7.データベースの完全なバックアップ後、ログのバックアップを1つ行い、ログの縮小を行う必要があります.
ログの縮小
通常、完全なバックアップが完了したら、ログバックアップを実行し、ログファイルの縮小を行う必要があります.ログのバックアップを行った後に記録が切断されるだけで、完全なバックアップや差異のバックアップだけを行っても、ログの縮小は効果的ではありません.
操作手順は次のとおりです.
USE [master]
GO
BACKUP DATABASE [DbName] TO DISK='xxx'
GO
BACKUP LOG [DbName] TO DISK='xxx'
GO
USE [DbName]
GO
-- ,
DECLARE @logName NVARCHAR(100);
SELECT @logName = name FROM sys.database_files WHERE type_desc = 'LOG'; --Type = 1
DBCC SHRINKFILE (@logName, 1024);
GO
ログをバックアップしない場合は、ログを直接切断します(推奨されません).次の2つの方法があります.
1.nul仮想ファイルにログを書き込む(SQL Serverの場合、nulは他の実際に存在するファイルと同様に、SQL SERVERはすべてのアクティブなログをスキャンし、そのログをフォーマットしてnulファイルに書き込む)
2.データベースを単純なリカバリ・モードに変更した後、完全なリカバリ・モードに変更
SQL 2005のWITH TRUNCATE_ONLYオプションは、同じ効果を発揮します.単純なリカバリモードで実行すると、すべてのアクティブなログはcheckpoint後に破棄されます.
-- nul
BACKUP LOG [DbName] TO DISK='nul'
-- , (sqlserver2005 )
BACKUP LOG [DbName] WITH TRUNCATE_ONLY
// 2008
-- ( ),
USE [master]
GO
ALTER DATABASE [DbName] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [DbName] SET RECOVERY SIMPLE --
GO
USE [DbName]
GO
--
DBCC SHRINKFILE (N'DbName_log' , 1024)
GO
USE [master]
GO
ALTER DATABASE [DbName] SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE [DbName] SET RECOVERY FULL --
GO