MySQL キャッシュの起動メソッドとパラメータ (query_cache_size) を分析する
MySQL クエリ キャッシュ はバージョン 4.1 から利用可能ですが、今すぐ勉強する価値があります。デフォルト設定では、MySQL のこの機能は有効になっていません。 '%query_cache%'; などの show 変数を使用すると、変数 have_query_cache の値が Yes であることがわかります。これは querycache が有効であることを意味しますが、これは実際には間違っています。このパラメータは、MYSQL の現在のバージョンがクエリ キャッシュをサポートしているかどうかを示します。実際、クエリ キャッシュが有効かどうかは、別のパラメータの値に依存します: query_cache_size。これは 0. で、クエリ キャッシュが無効になっていることを示し、デフォルト設定は 0.
MYSQLの
設定ファイル
my.iniまたはmy.cnfで次のコンテンツを見つけます: # クエリキャッシュは、SELECT結果をキャッシュし、後でそれらを返すために使用されます
#クエリ
# に同じクエリが多数あり、テーブルがほとんど変更されない場合、クエリ
# キャッシュを有効にすると、速度が大幅に向上する可能性があります。
# “Qcache_lowmem_prunes” ステータス変数を参照してください。現在の値
#は、負荷に対して十分な高さです。
# 注: テーブルが頻繁に変更される場合、またはクエリが毎回テキスト的に異なる場合
# では、クエリ キャッシュにより、代わりに
# 速度が低下する可能性があります。パフォーマンスの向上。
query_cache_size=0
上記の情報はデフォルト設定であり、その
コメント
は、MYSQL のクエリ キャッシュが選択クエリの結果をキャッシュするために使用され、次回同じクエリ リクエストが実行されたときに実行されないことを意味します。実際のクエリ処理では、結果が直接返されます。このようなクエリ キャッシュにより、クエリの速度が向上し、クエリのパフォーマンスが最適化されます。その前提条件は、同じクエリまたは類似したクエリが多数存在し、データがほとんど変更されないことです。テーブルを使用する場合は、この機能を使用する必要はありません。 Qcache_lowmem_prunes 変数の値を通じて、現在の値が現在のシステム負荷を満たしているかどうかを確認できます。注: クエリを実行するテーブルが頻繁に更新され、同じクエリがほとんどない場合は、クエリ キャッシュを使用しないことをお勧めします。
具体的な設定方法: 1. query_cache_size を特定のサイズに設定します。具体的なサイズはクエリの実際の状況によって異なりますが、基準値 32M で 1024 の倍数に設定するのが最善です。
2.行を追加します: query_cache_type=1
query_cache_type パラメーターは、キャッシュのタイプを制御するために使用されます。この値は、任意に設定することはできず、数値に設定する必要があることに注意してください。
If 0 に設定すると、キャッシュはまったく役に立たず、無効になっていると同等になります。しかしこの場合、システムは query_cache_size で設定されたサイズを割り当てる必要があるのでしょうか? この質問はテストする必要がありますか?
1 に設定すると、select ステートメントで SQL_NO_CACHE を使用してクエリ キャッシュを無効にしない限り、すべての結果がキャッシュされます。
2 に設定すると、select ステートメントの SQL_CACHE を通じてキャッシュする必要があるクエリのみがキャッシュされます。
OK、構成後のファイルの一部は次のとおりです:
query_cache_size=128M
query_cache_type=1
ファイルを保存し、MYSQL サービスを再起動し、次のクエリを通じて本当に有効かどうかを確認します:
mysql> show variables like ‘%query_cache%'; +——————————+———–+ | Variable_name | Value | +——————————+———–+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 134217728 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +——————————+———–+ 6 rows in set (0.00 sec)
主に、query_cache_size と query_cache_type の値は設定したものと一致していますか:
ここでの query_cache_size の値は 134217728 で、実際には同じですが、単位が異なります。自分で変換できます: 134217728 = 128*1024*1024。
query_cache_type は 1 に設定され、ON として表示されます。これについては前述しました。
つまり、上記の表示は設定が正しいことを示していますが、実際のクエリでクエリをキャッシュできるかどうかは、「%Qcache%」ステートメントのような show status を通じてテストする必要があります。これでクエリ キャッシュ機能が有効になりました。クエリを実行する前に、まず関連するパラメータの値を見てみましょう:
mysql> show status like ‘%Qcache%'; +————————-+———–+ | Variable_name | Value | +————————-+———–+ | Qcache_free_blocks | 1 | | Qcache_free_memory | 134208800 | | Qcache_hits | 0 | | Qcache_inserts | 0 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 2 | | Qcache_queries_in_cache | 0 | | Qcache_total_blocks | 1 | +————————-+———–+ 8 rows in set (0.00 sec)
这里顺便解释下这个几个参数的作用:
Qcache_free_blocks:表示查询缓存中目前还有多少剩余的blocks,如果该值显示较大,则说明查询缓存中的内存碎片过多了,可能在一定的时间进行整理。
Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整。
Qcache_hits:表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。
Qcache_inserts: 表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次数,次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的,这很正常。
Qcache_lowmem_prunes:该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。
Qcache_not_cached: 表示因为query_cache_type的设置而没有被缓存的查询数量。
Qcache_queries_in_cache:当前缓存中缓存的查询数量。
Qcache_total_blocks:当前缓存的block数量。
下边我们测试下:
比如执行如下查询语句
mysql> select * from user where id = 2; +—-+——-+ | id | name | +—-+——-+ | 2 | test2 | +—-+——-+ 1 row in set (0.02 sec)
然后执行show status like ‘%Qcache%',看看有什么变化:
mysql> show status like ‘%Qcache%'; +————————-+———–+ | Variable_name | Value | +————————-+———–+ | Qcache_free_blocks | 1 | | Qcache_free_memory | 134207264 | | Qcache_hits | 0 | | Qcache_inserts | 1 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 3 | | Qcache_queries_in_cache | 1 | | Qcache_total_blocks | 4 | +————————-+———–+ 8 rows in set (0.00 sec)
对比前面的参数值,我们发现Qcache_inserts变化了。Qcache_hits没有变,下边我们在执行同样的查询
select * from user where id = 2,按照前面的理论分析:Qcache_hits应该等于1,而Qcache_inserts应该值不变(其他参数的值变化暂时不关注,读者可以自行测试),再次执行:
show status like ‘%Qcache%',看看有什么变化:
mysql> show status like ‘%Qcache%'; +————————-+———–+ | Variable_name | Value | +————————-+———–+ | Qcache_free_blocks | 1 | | Qcache_free_memory | 134207264 | | Qcache_hits | 1 | | Qcache_inserts | 1 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 4 | | Qcache_queries_in_cache | 1 | | Qcache_total_blocks | 4 | +————————-+———–+ 8 rows in set (0.00 sec)
OK,果然跟我们分析的完全一致。
以上がMySQL キャッシュの起動メソッドとパラメータ (query_cache_size) を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP 開発では、キャッシュ メカニズムにより、頻繁にアクセスされるデータがメモリまたはディスクに一時的に保存され、データベース アクセスの数が削減され、パフォーマンスが向上します。キャッシュの種類には主にメモリ、ファイル、データベース キャッシュが含まれます。キャッシュは、組み込み関数またはサードパーティのライブラリ (cache_get() や Memcache など) を使用して PHP に実装できます。一般的な実用的なアプリケーションには、データベース クエリ結果をキャッシュしてクエリ パフォーマンスを最適化したり、ページ出力をキャッシュしてレンダリングを高速化したりすることが含まれます。キャッシュ メカニズムにより、Web サイトの応答速度が効果的に向上し、ユーザー エクスペリエンスが向上し、サーバーの負荷が軽減されます。

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。
