MySQLスロークエリログを分析して、パフォーマンスボトルネックを見つける
MySQLスロークエリログをオンにし、位置づけ可能なパフォーマンスの問題を分析します。 1.構成ファイルを編集するか、動的にSLOW_QUERY_LOGおよびLONG_QUERY_TIMEを設定します。 2。ログには、query_time、lock_time、rows_examinedなどの重要なフィールドが含まれており、効率のボトルネックの判断を支援します。 3. mysqldumpslowまたはpt-query-digestツールを使用して、ログを効率的に分析します。 4.最適化の提案には、インデックスの追加、Select *の回避、複雑なクエリの分割などが含まれます。たとえば、user_idにインデックスを追加すると、スキャンされた行の数を大幅に削減し、クエリ効率を改善できます。
MySQLのスロークエリログは、パフォーマンスの問題をトラブルシューティングするための重要なツールです。データベースの応答が遅いことがわかった場合、または一部のページの読み込み時間が大幅に増加した場合、スロークエリログをオンにして分析すると、多くの場合、問題がすぐに見つかります。

スロークエリログをオンにします
まず、スロークエリログが有効になっていることを確認し、「スロー」の適切な定義が設定されていることを確認してください。デフォルトでは、この値は1秒ですが、実際のニーズに応じて調整できます。

-
my.cnf
またはmy.ini
ファイルを編集します:slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 0.5
また、SQLを介して動的に設定することもできます。
グローバルslow_query_log = 'on'を設定します。 グローバルlong_query_time = 0.5を設定します。
注:パラメーターを変更した後、セッションを再接続または更新して有効にする必要がある場合があります。

スロークエリログコンテンツを分析します
ログファイルのレコードの各行には、実行時間、ロック時間、行数、行数をスキャンする行数、およびSQLステートメントの実際の実行が含まれます。例えば:
#query_time:2.34 lock_time:0.00 rows_sent:10 rows_examined:100000 select * from orders where user_id = 123;
上記のSQLは10個のデータのみを返しますが、100,000行をスキャンします。これは、インデックスが欠落しているか、クエリメソッドが十分に効率的でない可能性があることを示しています。
いくつかの一般的な重要なフィールド:
-
Query_time
:クエリ全体でかかる時間(秒) -
Lock_time
:ロックを待つ時間 Rows_examined
:スキャンされた行の数Rows_sent
:クライアントに送信される行の数
Rows_examined
Rows_sent
よりもはるかに大きい場合は、インデックスまたはクエリ構造の最適化を検討する必要があります。
一般的に使用される分析ツールを推奨します
手動ログの表示は非効率的であり、一部のツールを使用して分析を支援できます。
mysqldumpslow :MySQLにはコマンドラインツールが付属しており、スロークエリをカウントおよび要約できます。
mysqldumpslow -s at -t 10 /var/log/mysql/mysql-slow.log
上記のコマンドは、平均時間ごとに並べ替え、トップ10の最も遅いクエリをリストします。
PT-Query-Digest :Percona Toolkitのツール。これは、より強力で、より複雑な集約と分析をサポートしています。
pt-query-digest /var/log/mysql/mysql-slow.log> report.txt
これらのツールは、最適化を優先するために、どのSQLが頻繁に表示され、より多くのリソースを消費するかを見つけるのに役立ちます。
一般的な最適化の提案
遅いクエリを見つけたら、次のステップはそれらを最適化することです。ここにいくつかの一般的な慣行があります:
- 頻繁に照会されるインデックスフィールド、特に
WHERE
のフィールドとJOIN
条件 SELECT *
使用を避け、必要なフィールドのみを選択しますEXPLAIN
使用して実行計画を表示し、インデックスがヒットしたかどうかを確認します- 大きなクエリでのリソースの長期使用を回避するために、複雑なクエリを合理的に分割する
- 統計情報を正確に保つために、テーブル分析を定期的に(
ANALYZE TABLE
)します
たとえば、上記のSELECT * FROM orders WHERE user_id = 123;
user_id
にインデックスが確立されていない場合、インデックスを追加することでパフォーマンスを大幅に改善できます。
Table注文を変更すると、IDX_USER_ID(user_id);
これが再び実行されると、スキャンされた行の数は数万から数十の数十になる可能性がありますが、これは非常に明白です。
基本的にそれだけです。スロークエリログを分析することは特に難しくありませんが、インデックスが実際に機能するかどうか、実行計画が変更されたかどうかなど、いくつかの詳細を無視するのは本当に簡単です。定期的な検査を主張する限り、パフォーマンスの劣化を避けるために潜在的な問題を発見することができます。
以上がMySQLスロークエリログを分析して、パフォーマンスボトルネックを見つけるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

Tosecuremysqleffectivilly、useobject-levelprivilegestolimituseracesseracessbadeds.beginbyunderstanding thatobject-leveligesapplytodatabases、Tables、orcolumns、subfice finercontrolthangloblabliledeges.next、適用

大規模なテーブルを扱う場合、MySQLのパフォーマンスと保守性が課題に直面し、構造設計、インデックス最適化、テーブルサブテーブル戦略などから開始する必要があります。オーバーレイインデックスを使用して、クエリ効率を向上させます。スロークエリログを定期的に分析し、無効なインデックスを削除します。 2。パーティションテーブルの合理的な使用:クエリとメンテナンスの効率を改善するための時間範囲やその他の戦略に従ってパーティションをかけますが、分割と削減の問題に注意を払う必要があります。 3.分離とライブラリの分離の読み取りと書き込みを検討してください。ライブラリの分離とテーブルの分離は、大量のデータを備えたシナリオに適しています。ミドルウェアを使用して、トランザクションとクロスストアのクエリの問題を評価することをお勧めします。早期計画と継続的な最適化が重要です。

toimprovemysqlperformanceforcmsplatformslikewwordpress、最初にaCachinginginslikEridEdisoredisoredisoredisoredisoredisoredisoredisoredisoredisomcaching(承認可能)、およびandusepagecachingpluginstoservestaticfiles.sond、sedemysemysemysqlconfigurationiincurationbyincurationcurationcurationは

MySQLサービスが実行されているかどうかを確認して、sudosystemctlstatusmysqlを使用して確認および開始します。 2.リモート接続を許可してサービスを再起動するために、バインドアドレスが0.0.0.0に設定されていることを確認してください。 3. 3306ポートが開いているかどうかを確認し、ポートを許可するファイアウォールルールを確認して構成します。 4。「アクセス」エラーの場合、ユーザー名、パスワード、ホスト名を確認し、mysqlにログインしてmysql.userテーブルをクエリしてアクセス許可を確認する必要があります。必要に応じて、 'your_user'@'%'を使用するなど、ユーザーを作成または更新して承認します。 5. caching_sha2_passwordにより認証が失われた場合

deleteremovesspecificorallrows、keepstable-structure、asollollbackandtriggers、およびdoesnotresetauto-increment;

MySQLは、バージョン8.0.16から効果的なドメインの完全性を強制するためのチェック制約をサポートしています。 1.テーブルを作成するときに制約を追加する:createTableを使用して、18歳以上、給与> 0、部門の制限値などのチェック条件を定義します。 2。テーブルを変更して制約を追加します。AlterTableadDconstraintを使用して、名前以外の名前などのフィールド値を制限します。 3.複雑な条件を使用する:終了日≥の日付や完了ステータスなどのマルチカラムロジックと式のサポートは、終了日を持つ必要があります。 4。制約の削除:AlterTabledRopConstraintを使用して、削除する名前を指定します。 5。注:mysql8.0.16、innodbまたはmyisamを引用する必要があります

MySQLデータの血Tiesトラッキングを実現するためのコア方法は次のとおりです。1。ビンログを使用して、データ変更ソースを記録し、BINLOGを有効および分析し、アプリケーション層のコンテキストと組み合わせて特定のビジネスアクションを追跡します。 2. TAGSをETLプロセスに注入し、ツールを同期するときにソースとターゲットのマッピング関係を記録します。 3.コメントとメタデータタグをデータに追加し、テーブルを構築するときにフィールドソースを説明し、メタデータ管理システムに接続して視覚マップを形成します。 4.主要なキーの一貫性に注意し、SQL分析、バージョン制御データモデルの変更への過度の依存性を避け、正確で信頼性の高いブラッドタイの追跡を確実にするために、血の絆データを定期的に確認してください。

useamany-to-manyrelationshipwithunctiontabletolinkitemsandtagsviathreetables:アイテム、タグ、anditem_tags.2
