以前は、さまざまな理由により、一部のアラームは真剣に受け止められませんでした。最近、休暇中に、すぐにいくつかの潜在的な人的要因を排除し、データベースのスローログアラームが少しおかしいことに気付きました。主な兆候は、スローログアラームが真実ではなかったことです。アラームのインスタントメッセージリマインダーを受け取った後、しばらくしてデータベースにアクセスして確認したところ、スローログのパフォーマンスはそれほど悪くないことがわかりました(しきい値を60に設定しました)。 コード レベルでロジックを数回チェックした結果、明らかな問題は見つかりませんでした。しかし、数回の試行後も問題は解決しませんでした。このことが、問題を修正するきっかけとなり、原因を詳しく調べることにしました。 バックエンドは ORM ベースのモデルを使用し、データはモデル MySQL_slowlog_sql_history に対応するテーブルに保存されます。 コード レベルには次のロジックがあります。
渡される時間は動的で、しきい値は 60 秒です。予想どおり、アラームがトリガーされた場合は問題が発生しているはずです。 さらに検証するために、しきい値時間を 600 に変更しましたが、それでもエラーが報告され、実行に 7 ~ 8 秒かかる遅いクエリが報告されました。 ORM によって解析された SQL を取得するためにデバッグを使用しました。 SELECT ... `mysql_slowlog_sql_history`.`create_time`、`mysql_slowlog_sql_history`.`memo` `mysql_slowlog_sql_history` から WHERE (`mysql_slowlog_sql_history`.`create_time` > '2020-01-29 11:00:00' AND `mysql_slowlog_sql_history`.`Query_time_pct_95` > '600') LIMIT 21; 引数=(u'2020-01-29 11:00:00', u'600') SQLを見ても問題はありません。 クライアント側で実行したところ、問題なく動作し、600 秒以上かかった結果のみがフィルター処理されました。 mysql_slowlog_sql_history から ip_addr、db_port を選択 create_time>'2020-01-29 00:00:00' かつ Query_time_pct_95 > 600 の場合; この結果を見て、私はその理由は何だったのかを考え始めました。 モデルのフィールド定義を見て理解し始め、すぐに検証しました。 説明のために、テスト テーブル test_dummy を作成しました。 テーブル test_dummy(id int primary key auto_increment,Query_time_pct_95 varchar(100)) を作成します。 いくつかのデータを初期化します。 test_dummy(Query_time_pct_95) に値('8.83736'),('7.70056'),('5.09871'),('4.32582') を挿入します。 +----+-------------------+ | id | クエリ時間 PCT 95 | +----+-------------------+ | 1 | 8.83736 | | 4 | 7.70056 | | 7 | 5.09871 | | 10 | 4.32582 | +----+-------------------+ セット内の 4 行 (0.00 秒) 次に、次の 2 つのステートメントを使用して比較テストを実行します。 mysql> test_dummy から * を選択します。ここで、Query_time_pct_95>600; 空のセット (0.00 秒) mysql> test_dummy から * を選択します。Query_time_pct_95>'600'; +----+-------------------+ | id | クエリ時間 PCT 95 | +----+-------------------+ | 1 | 8.837364 | | 2 | 7.700558 | +----+-------------------+ セット内の 2 行 (0.00 秒) 整数値を使用すると結果が返されませんが、文字型を使用すると、一致する結果が最も左端の一致パターンに従ってフィルタリングされることがわかります。これは、データベース レベルでの浮動小数点数の処理が依然として大きく異なることを意味します。 したがって、この問題の簡単な解決策は、データベース レベルでデータ テーブル タイプを float に変更することであり、これによる精度の低下への影響はごくわずかです。 再度検証したところ、問題は再発しませんでした。 上記は、MySQL のスロー ログ監視の誤報問題の詳細な分析と解決方法です。MySQL のスロー ログ監視の誤報の詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。 以下もご興味があるかもしれません:
|
<<: Dockerを使用してJenkinsをインストールする方法
>>: CSSカスケーディングメカニズムについての簡単な説明
エラーメッセージ:エラー 2002 (HY000): ソケット '/tmp/mysql.so...
本日の投稿では、Web デザインで使用される円形要素の優れた例をいくつか挙げ、美しい丸いボタン、メニ...
過去の Linux イメージに関する問題を修正従来の Linux イメージで作成された ECS クラ...
目次1. 関数を使用してコンポーネントを作成する2. クラスを使用してコンポーネントを作成する3. ...
1. 基本仕様(1)InnoDBストレージエンジンを使用する必要があります。解釈:トランザクション、...
今はモバイルインターネットが急速に発展している時代です。スマートフォンやタブレットはますます普及し、...
計算機の主な機能は数値計算を実行することです。計算機機能の Web インスタンスを開発すると、js ...
目次まず効果を見てみましょう:成し遂げる:要約:まず効果を見てみましょう: 成し遂げる: 1. ナビ...
導入コンパイル、インストール、問題の解決後、Nginx は正常に動作していますが、現時点では Ngi...
<div align="center"> <table sty...
環境に関する声明ホストOS: Cetnos7.9 最小インストールdocker バージョン: 20....
JD カルーセルは、動的な効果を追加せず、主に位置決めの知識を使用して、純粋な HTML と CS...
<br />原文: http://uicom.net/blog/?p=762 Faceb...
vue-cli は stimulsoft.reports.js を使用します (ナニーレベルのチュー...
1. はじめにSupervisor は Python で開発された汎用プロセス管理プログラムです。通...