sql >> データベース >  >> RDS >> Mysql

innodb_buufer_pool _size / RAMを犠牲にして、query_cache_size用のスペースを作る必要がありますか?

    2014年6月に、私は https://dba.stackexchange.com/questions/66774/why-query-cache-type-is-disabled-by-default-start-from-mysql-5 -6/66796#66796

    その投稿では、InnoDBがInnoDBバッファープールとクエリキャッシュの間でどのように変更をマイクロ管理するかについて説明しました。

    クエリキャッシュを使用しない

    最も簡単な答えは、クエリキャッシュを無効にすることですが、落とし穴があります。両方を設定する必要があります query_cache_size および query_cache_type ゼロ(0)に。

    query_cache_type ゼロ(0)まで、変更のマイクロ管理は引き続き行われます。これは、MySQLのパラグラフ8によって確認されます。ドキュメント「クエリキャッシュ構成」 言う

    クエリキャッシュの使用

    本当にクエリキャッシュを使用したい場合は、データを調べる必要があります。基本的に、結果のサイズを知る必要があります。次に、query_cache_limit を設定します。 および query_cache_min_res_unit 平均サイズの結果セットと最大サイズの結果セットに対応します。

    別の方法として、クエリキャッシュをグローバルに有効にしますが、段落9

    実際の質問

    クエリキャッシュ、InnoDBバッファプール、接続スレッドごと(私の投稿 https://dba.stackexchange.com/questions/16969/how-costly-is-opening-and-closing-of-a-db-connection/ 16973#16973 )、およびOSはすべてRAMをめぐって競合します。

    クエリキャッシュとInnoDBバッファプールだけを見るときは、MySQLが数日または数週間実行された後、InnoDBバッファプールの空き容量を確認する必要があります。

    これをクエリで実行できます

    SELECT variable_value / 64 free_mb
    FROM information_schema.global_status
    WHERE variable_name='Innodb_buffer_pool_pages_free';
    

    これにより、InnoDBバッファープールをどれだけ下げることができるかがわかります。次に、そのサイズだけクエリキャッシュを増やすことができます。このクエリが1024未満を返す場合は、おそらく努力する価値はありません。 RAMから追加のスペースを取得するか、クエリキャッシュを無効にするだけです。



    1. Linux上のSQLServer2016

    2. SCDタイプ6

    3. SQL Server * =オペレーター?

    4. ダイアログボックスを使用せずに、C#プロジェクトでMySQLデータベースの接続文字列を設定するにはどうすればよいですか?