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つ行い、ログの縮小を行う必要があります.
 

ログの縮小


通常、完全なバックアップが完了したら、ログバックアップを実行し、ログファイルの縮小を行う必要があります.ログのバックアップを行った後に記録が切断されるだけで、完全なバックアップや差異のバックアップだけを行っても、ログの縮小は効果的ではありません.
操作手順は次のとおりです.
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