多くの場合テクノロジーを好む開発者およびDBAとして、しかし大規模な組織を運営している場合は、すべてのテクノロジーにもっと適応する必要があります。私の大規模な銀行のクライアントの1つは、さまざまな異なるトランザクションを実行するために複数のデータベースを使用しています。彼らはまた、彼らのビジネスや最高級のハードウェアのために多くの異なるキャッシングソリューションを使用しています。 MySQLとSQLServerのキャッシュからではなく、クエリを取得する方法についてクライアントと非常に興味深い会話をしました。SQL_NO_CACHEとOPTION(RECOMPILE)について説明しました。 包括的なデータベースパフォーマンスヘルスチェックで話し合いました 。
今日、MySQLとSQLServerの2つの異なる例を見てみましょう。どちらのリレーショナルデータベースも、メモリキャッシュを利用してデータを返します。キャッシュされた結果を使用せず、キャッシュからではなくSQLServerディスクから直接データを取得するクエリを作成する方法を見てみましょう。
SQL Serverクエリ–オプション(再コンパイル)
SELECT Columnname FROM TableName OPTION(RECOMPILE)
MySQLクエリSQL_NO_CACHE
SELECT SQL_NO_CACHE Columnname FROM TableName OPTION(RECOMPILE)
SQL_NO_CACHEとOPTION(RECOMPILE)を使用すると、リレーショナルデータベース(それぞれMySQLとSQL Server)は、キャッシュに格納されているデータではなく、ディスクからデータを直接取得します。
同じトピックに関連するいくつかのブログ投稿があります。これらは興味深いと思われるかもしれません。
- SQL SERVER –クエリプラン、キャッシュサイズ、テキスト、実行数の一覧表示
- SQL SERVER –キャッシュから最も古いクエリプランを見つける
- SQL SERVER –メモリ内のキャッシュとデータキャッシュを計画する
- SQL SERVER –ストアドプロシージャ–キャッシュのクリーンアップとバッファのクリーンアップ
- SQL SERVER –特定の期間に使用されなかったすべてのクエリキャッシュプランを削除する
- SQL SERVER –キャッシュからパラメーターを使用してコンパイル済みプランを取得するスクリプト
- SQL SERVER –プランキャッシュ–取得と削除–シンプルなスクリプト
- SQL SERVER – 2017 –データベースレベルでプロシージャキャッシュをクリアするスクリプト