検索

Mysql 高负载排查思路

Jun 07, 2016 pm 03:40 PM
mysqltop注文アイデアトラブルシューティング負荷高負荷

发现问题 top命令 查看服务器负载,发现 mysql竟然 百分之两百的cpu ,引起Mysql 负载这么高的原因,估计是 索引问题和某些变态SQL语句. 排查思路 1. 确定高负载的类型,top命令看 负载高是CPU还是IO 。 2. mysql 下执行 查看当前的连接数与执行的sql 语句 。 3.

发现问题 
top命令 查看服务器负载,发现 mysql竟然百分之两百的cpu,引起Mysql 负载这么高的原因,估计是索引问题和某些变态SQL语句. 

排查思路 
1. 确定高负载的类型,top命令看负载高是CPU还是IO。 
2. mysql 下执行查看当前的连接数与执行的sql 语句。 
3. 检查慢查询日志,可能是慢查询引起负载高。 
4. 检查硬件问题,是否磁盘故障问题造成的。 
5. 检查监控平台,对比此机器不同时间的负载。 

确定负载类型(top)

<ol>
<li><span><span>top - 10:14:18 up 23 days, 11:01,  1 user, </span><span>load average: 124.17, 55.88, 24.70 </span></span></li>
<li><span>Tasks: 138 total,   1 running, 137 sleeping,   0 stopped,   0 zombie </span></li>
<li><span>Cpu(s):  2.4%us,  1.0%sy,  0.0%ni, 95.2%id,  2.0%wa,  0.1%hi,  0.2%si,  0.0%st </span></li>
<li><span>Mem:   3090528k total,  2965772k used,   124756k free,    93332k buffers </span></li>
<li><span>Swap:  4192956k total,  2425132k used,  1767824k free,   756524k cached </span></li>
<li><span>           </span></li>
<li><span>PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND </span></li>
<li><span>30833 mysql     15   0 6250m 2.5g 4076 S <span>257.1</span> 49.9 529:34.45 mysqld  </span></li>
</ol>


查看当前的连接数与执行的sql 语句

<ol>
<li><span>show processlist; </span></li>
<li><span>Id  User    Host    db  Command Time    State   Info </span></li>
<li><span>192 slave   8.8.8.142:39820 NULL    Binlog Dump 58982   Has sent all binlog to slave; waiting for binlog to be updated  NULL </span></li>
<li><span>194 slave   8.8.8.120:41075 NULL    Binlog Dump 58982   Has sent all binlog to slave; waiting for binlog to be updated  NULL </span></li>
<li><span>424891 biotherm    8.8.8.46:57861  biotherm    Query   493 Sending data    SELECT * FROM xxx_list WHERE <span>tid</span><span> = </span><span>'1112'</span><span>  AND </span><span>del</span><span> = </span><span>0</span><span>  ORDER BY  id </span></span></li>
<li><span>DESC  LIMIT 0, 4 </span></li>
<li><span>424917 biotherm    8.8.8.49:50984  biotherm    Query   488 Sending data    SELECT * FROM xxx_list WHERE <span>tid</span><span> = </span><span>'1112'</span><span>  AND </span><span>del</span><span> = </span><span>0</span><span>  ORDER BY  id </span></span></li>
<li><span>DESC  LIMIT 0, 4 </span></li>
<li><span>.............................................. </span></li>
<li><span>430330 biotherm    8.8.8.42:35982  biotherm    Query   487 Sending data    SELECT * FROM xxx_list WHERE <span>tid</span><span> = </span><span>'1112'</span><span>  AND </span><span>del</span><span> = </span><span>0</span><span>  </span></span></li>
</ol>


记录慢查询 
编辑Mysql 配置文件(my.cnf),在[mysqld]字段添加以下几行:

<ol>
<li><span><span>log_slow_queries</span><span> = /usr/local/mysql/var/slow_queries.log   #慢查询日志路径 </span></span></li>
<li><span><span>long_query_time</span><span> = </span><span>10</span><span>                                       #记录SQL查询超过10s的语句 </span></span></li>
<li><span><span>log-queries-not-using-indexes</span><span> = </span><span>1</span><span>                          #记录没有使用索引的sql </span></span></li>
</ol>


查看慢查询日志

<ol>
<li><span>tail /usr/local/mysql/var/slow_queries.log </span></li>
<li><span># Time: 130305  9:48:13 </span></li>
<li><span># User@Host: biotherm[biotherm] @  [8.8.8.45] </span></li>
<li><span># Query_time: 1294.881407  Lock_time: 0.000179 Rows_sent: 4  Rows_examined: 1318033 </span></li>
<li><span>SET <span>timestamp</span><span>=</span><span>1363916893</span><span>; </span></span></li>
<li><span>SELECT * FROM xxx_list WHERE <span>tid</span><span> = </span><span>'11xx'</span><span>  AND </span><span>del</span><span> = </span><span>0</span><span>  ORDER BY  id DESC  LIMIT 0, 4;  </span></span></li>
</ol>

4个参数 
Query_time: 0 Lock_time: 0 Rows_sent: 1 Rows_examined: 54 
分别意思为:查询时间 锁定时间 查询结果行数 扫描行数,主要看扫描行数多的语句,然后去数据库加上对应的索引,再优化下变态的sql 语句。 

极端情况kill sql进程

<ol>
<li><span>找出占用cpu时间过长的sql,在mysql 下执行如下命令: </span></li>
<li><span>show processlist; </span></li>
<li><span>确定后一条sql处于Query状态,且Time时间过长,锁定它的ID,执行如下命令: </span></li>
<li><span>kill QUERY  269815764;  </span></li>
</ol>

注意:杀死 sql进程,可能导致数据丢失,所以执行前要衡量数据的重要性。 

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLのストアドプロシージャとは何ですか?MySQLのストアドプロシージャとは何ですか?May 01, 2025 am 12:27 AM

ストアドプロシージャは、パフォーマンスを向上させ、複雑な操作を簡素化するためのMySQLのSQLステートメントを事前に拡大します。 1。パフォーマンスの改善:最初のコンピレーションの後、後続の呼び出しを再コンパイルする必要はありません。 2。セキュリティの改善:許可制御を通じてデータテーブルアクセスを制限します。 3.複雑な操作の簡素化:複数のSQLステートメントを組み合わせて、アプリケーションレイヤーロジックを簡素化します。

クエリキャッシュはMySQLでどのように機能しますか?クエリキャッシュはMySQLでどのように機能しますか?May 01, 2025 am 12:26 AM

MySQLクエリキャッシュの実用的な原則は、選択クエリの結果を保存することであり、同じクエリが再度実行されると、キャッシュされた結果が直接返されます。 1)クエリキャッシュはデータベースの読み取りパフォーマンスを改善し、ハッシュ値を使用してキャッシュされた結果を見つけます。 2)単純な構成、mysql構成ファイルでquery_cache_typeとquery_cache_sizeを設定します。 3)SQL_NO_CACHEキーワードを使用して、特定のクエリのキャッシュを無効にします。 4)高周波更新環境では、クエリキャッシュがパフォーマンスボトルネックを引き起こし、パラメーターの監視と調整を通じて使用するために最適化する必要がある場合があります。

他のリレーショナルデータベースでMySQLを使用することの利点は何ですか?他のリレーショナルデータベースでMySQLを使用することの利点は何ですか?May 01, 2025 am 12:18 AM

MySQLがさまざまなプロジェクトで広く使用されている理由には、次のものがあります。1。複数のストレージエンジンをサポートする高性能とスケーラビリティ。 2。使いやすく、メンテナンス、シンプルな構成とリッチツール。 3。豊富なエコシステム、多数のコミュニティとサードパーティのツールサポートを魅了します。 4。複数のオペレーティングシステムに適したクロスプラットフォームサポート。

MySQLのデータベースアップグレードをどのように処理しますか?MySQLのデータベースアップグレードをどのように処理しますか?Apr 30, 2025 am 12:28 AM

MySQLデータベースをアップグレードする手順には次のものがあります。1。データベースをバックアップします。2。現在のMySQLサービスを停止します。3。MySQLの新しいバージョンをインストールします。アップグレードプロセス中に互換性の問題が必要であり、Perconatoolkitなどの高度なツールをテストと最適化に使用できます。

MySQLに使用できるさまざまなバックアップ戦略は何ですか?MySQLに使用できるさまざまなバックアップ戦略は何ですか?Apr 30, 2025 am 12:28 AM

MySQLバックアップポリシーには、論理バックアップ、物理バックアップ、増分バックアップ、レプリケーションベースのバックアップ、クラウドバックアップが含まれます。 1. Logical BackupはMySqldumpを使用してデータベースの構造とデータをエクスポートします。これは、小さなデータベースとバージョンの移行に適しています。 2.物理バックアップは、データファイルをコピーすることで高速かつ包括的ですが、データベースの一貫性が必要です。 3.インクリメンタルバックアップは、バイナリロギングを使用して変更を記録します。これは、大規模なデータベースに適しています。 4.レプリケーションベースのバックアップは、サーバーからバックアップすることにより、生産システムへの影響を減らします。 5. Amazonrdsなどのクラウドバックアップは自動化ソリューションを提供しますが、コストと制御を考慮する必要があります。ポリシーを選択するときは、データベースサイズ、ダウンタイム許容度、回復時間、および回復ポイントの目標を考慮する必要があります。

MySQLクラスタリングとは何ですか?MySQLクラスタリングとは何ですか?Apr 30, 2025 am 12:28 AM

mysqlclusteringenhancesdatabaserobustnessnessnessnessnessnistandistributiondistributingdataacrossmultiplenodes.itesthendbenginefordatareplication andfaulttolerance、保証highavailability.setupinvolvesconfiguringmanagement、data、ssqlnodes、carefulmonitoringringandpe

MySQLのパフォーマンスのためにデータベーススキーマ設計を最適化するにはどうすればよいですか?MySQLのパフォーマンスのためにデータベーススキーマ設計を最適化するにはどうすればよいですか?Apr 30, 2025 am 12:27 AM

MySQLのデータベーススキーマ設計の最適化は、次の手順を通じてパフォーマンスを改善できます。1。インデックス最適化:一般的なクエリ列にインデックスを作成し、クエリのオーバーヘッドのバランスをとり、更新を挿入します。 2。テーブル構造の最適化:正規化または反通常化によりデータ冗長性を削減し、アクセス効率を改善します。 3。データ型の選択:Varcharの代わりにINTなどの適切なデータ型を使用して、ストレージスペースを削減します。 4。パーティション化とサブテーブル:大量のデータボリュームの場合、パーティション化とサブテーブルを使用してデータを分散させてクエリとメンテナンスの効率を改善します。

MySQLのパフォーマンスをどのように最適化できますか?MySQLのパフォーマンスをどのように最適化できますか?Apr 30, 2025 am 12:26 AM

tooptimizemysqlperformance、soflowthesesteps:1)properindexingtospeedupqueries、2)useexplaintoanalyzeandoptimize Queryperformance、3)AductServerContingSettingStingsinginginnodb_buffer_pool_sizeandmax_connections、4)

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター