SQL Server データ テーブルをメモリに保持することは SQL Server によって提供される機能であり、一般的な小規模システムの開発プロセスにはほとんど関与しません。ここでは、SQL Server のテーブルのすべてのデータをメモリに配置してインメモリ データベースを実装し、リアルタイム パフォーマンスを向上させる方法を示す関連ドキュメントがまとめられています。
1、DBCC PINTABLE
テーブルを固定するようにマークします。これは、
Microsoft SQL Server がテーブルのページをメモリからフラッシュしないことを意味します。
DBCC PINTABLE (database_id , table_id )
データベース ID を確認するには、DB_ID 関数を使用します。
テーブル ID を確認するには、OBJECT_ID 関数を使用します。
DBCC PINTABLE を
コメント化しても、
テーブルはメモリに読み込まれません。テーブル内のページが通常の Transact-SQL ステートメントによってキャッシュに読み込まれると、それらのページはメモリ常駐ページとしてマークされます。 SQL Server が新しいページを読み取るためのスペースを必要とする場合、メモリ常駐ページはクリアされません。 SQL Server は引き続きページの更新を記録し、必要に応じて更新されたページをディスクに書き込みます。ただし、SQL Server は、DBCC UNPINTABLE ステートメントを使用してテーブルが非常駐化されるまで、使用可能なページのコピーをキャッシュに保持します。
DBCC PINTABLE は、頻繁に参照される小さなテーブルをメモリ内に保持する場合に最適です。小さなテーブルのページを一度にメモリに読み取ると、今後そのデータへの参照をすべてディスクから読み取る必要がなくなります。
注 DBCC PINTABLE を使用するとパフォーマンスが向上しますが、使用には注意が必要です。大きなテーブルが存在する場合、そのテーブルはシステム内の他のテーブルに十分なキャッシュを残さずに、最初はキャッシュの大部分を使用します。ホストされたテーブルがキャッシュより大きい場合、テーブルはキャッシュ全体を埋めます。 sysadmin 固定サーバー ロールのメンバーは、SQL Server をシャットダウンして再起動し、テーブルを非常駐にする必要があります。ホストするテーブルが多すぎると、キャッシュよりも大きいテーブルをホストする場合と同じ問題が発生します。
例:
@db_id int, @tbl_id int を宣言します。
DATABASE_NAME を使用します
。 Set @db_id = DB_ID('DATABASE_NAME')
Set @tbl_id = Object_ID('Department')
DBCC pintable (@db_id, @tbl_id)
は、テーブルDepartmentをメモリに設定できます。居住者 。
@db_id int、@tbl_id int を宣言します。
DATABASE_NAME を使用します
。 Set @db_id = DB_ID('DATABASE_NAME')
Set @tbl_id = Object_ID('Department')
DBCC UNpintable (@db_id、@tbl_id)
は、テーブルDepartment をメモリ常駐として設定解除できます。
次の SQL コマンドを使用して実行を検出できます。
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')
戻り結果が 1 の場合: テーブルがメモリ内に常駐するように設定されていることを意味します。メモリに常駐するように設定されていないこと。
2、SP_TableOption
ユーザー定義テーブルのオプション値を設定します。sp_tableoptionは
、text、ntext、または image 列を含むテーブルでテキストイン行機能を有効にするために使用できます。
sp_tableoption [ @TableNamePattern = ] 'テーブル'
, [ @OptionName = ] 'オプション名'
, [ @OptionValue = ] 'value'
ここで、'option_name' は次のように使用されます:
pintable -- 無効にすると (デフォルト)、テーブルが RAM 常駐ではなくなったとマークされます。 有効にすると、テーブルが RAM 常駐としてマークされます。 (指定したテーブルはメモリ内に常駐させることができます)
さらに、一括読み込み時のテーブル ロック、行の挿入ロック、行内のテキスト、およびその他のオプションの値は、メモリ内に常駐するテーブルに関与せず、特定の使用法については、SQL Server ブックをクエリできます。オンライン。
値は次のとおりです。option_name
は有効 (true、on、または 1) または無効 (false、off、または 0)
です。
例:
EXEC sp_tableoption 'Department','pintable', 'true'
は、データ テーブルDepartment をメモリに常駐させます。
EXEC sp_tableoption 'Department','pintable', 'false' は、
メモリに常駐しているデータ テーブルDepartment をキャンセルします。 。
次の SQL コマンドを使用して実行を検出できます。
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')
戻り結果が 1 の場合: テーブルがメモリ内に常駐するように設定されていることを意味します。メモリに常駐するように設定されていないこと。
3. 結論
データ テーブルをメモリ常駐に設定すると、テーブルが取得されるまで、テーブルは実際にはメモリに読み込まれません。したがって、次の SQL 命令を使用して、データ テーブルDepartment をメモリ内にさらに常駐させることができます。
Select * FromDepartment
さらに、次の SQL 命令を使用すると、データベースのメモリに常駐するように設定されているすべてのテーブルを簡単に表示/検出できます:
SELECT * FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_TYPE = 'BASE TABLE'
AND OBJECTPROPERTY(object_id(TABLE_NAME), 'TableIsPinned' ) > 0