MySQL がデータの削除と挿入に非常に時間がかかる問題の解決策

MySQL がデータの削除と挿入に非常に時間がかかる問題の解決策

会社の開発者がテスト環境で挿入ステートメントを実行すると、正常に実行されるまでに 10 秒以上かかります。テスト環境のデータベースパフォーマンス、データ量、デッドロックなどの情報を確認しましたが、異常は見つかりませんでした。最終的に、ログの書き込み方法を変更することでこの問題は解決されました。

1. 変更方法

/etc/my.cnf ファイルを変更し、innodb_flush_log_at_trx_commit = 1 を 0 に変更します。ただし、これにより、データベースがクラッシュしてから 1 秒以内にデータベースに保存されていないデータが失われるリスクが発生します。 MySQL のドキュメントでは、このパラメータについて次のように説明されています。

innodb_flush_log_at_trx_commit の値が 0 の場合、ログ バッファーは 1 秒ごとにログ ファイルに書き出され、ログ ファイルに対してディスクへのフラッシュ操作が実行されますが、トランザクションのコミット時には何も行われません。値が 1 (デフォルト) の場合、ログ バッファーはトランザクションのコミットごとにログ ファイルに書き出され、ログ ファイルに対してディスクへのフラッシュ操作が実行されます。値が 2 の場合、ログ バッファーはコミットごとにファイルに書き出されますが、ディスクへのフラッシュ操作は実行されません。ただし、値が 2 の場合でも、ログ ファイルのフラッシュは 1 秒ごとに実行されます。プロセスのスケジュールの問題により、1 秒ごとに 1 回のフラッシュが毎秒実行されるとは限らないことに注意してください。

2. パラメータの説明

  • 0: ログ バッファは 1 秒ごとにログ ファイルに書き込まれ、同時にログ ファイルがフラッシュ (ディスクにフラッシュ) されます。このモードでは、トランザクションがコミットされても、ディスクへの書き込み操作はアクティブにトリガーされません。
  • 1: トランザクションがコミットされるたびに、MySQL はログ バッファ内のデータをログ ファイルに書き込み、ディスクにフラッシュします。このモードはシステムのデフォルトです。
  • 2: トランザクションがコミットされるたびに、MySQL はログ バッファー内のデータをログ ファイルに書き込みますが、同時にフラッシュ操作は実行されません。このモードでは、MySQL は 1 秒ごとにフラッシュ操作を実行します。

3. 注意事項

0 に設定すると、このモードは最も高速になりますが、安全性は低くなります。mysqld プロセスがクラッシュすると、最後の 1 秒間のすべてのトランザクション データが失われます。

1 に設定すると、このモードは最も安全ですが、最も遅くなります。 mysqld サービスまたはサーバー ホストがクラッシュした場合、バイナリ ログでは最大 1 つのステートメントまたは 1 つのトランザクションが失われる可能性があります。

2 に設定すると、このモードは 0 よりも高速かつ安全になります。最後の 1 秒間のすべてのトランザクション データは、オペレーティング システムがクラッシュした場合、またはシステムの電源が失われた場合にのみ失われる可能性があります。

2 つのパラメータ innodb_flush_log_at_trx_commit と sync_binlog は、MySQL ディスク書き込み戦略とデータ セキュリティを制御するための重要なパラメータです。両方のパラメータを 1 に設定すると、書き込みパフォーマンスが最悪になります。推奨される方法は、innodb_flush_log_at_trx_commit=2、sync_binlog=500 または 1000 です。

これで、MySQL のデータの削除と挿入が非常に遅い問題を解決する方法についての記事は終わりです。MySQL のデータの削除と挿入が非常に遅いことに関する関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Navicat の MySQL へのリモート接続が遅い理由の詳細な説明
  • MySQLクエリが遅い場合の理由と解決策
  • MySQL データベースへのリモート接続が遅い場合の解決策
  • MySQLがデータを送信することによって引き起こされるクエリの遅延の問題を解決する方法とアイデア
  • MySQL へのリモート接続が遅い問題を解決する方法 (mysql_connect が接続をゆっくり開く)
  • MySQL ドメイン名解決を無効にする (MySQL へのリモート アクセスが遅い問題を解決するため)

<<:  ウェブサイトのビジュアルデザインパスはユーザーの習慣に合わせる必要がある

>>:  リアルタイムコンピューティングフレームワークFlinkクラスタの構築と動作メカニズムについての簡単な説明

推薦する

Mysqlはマスタースレーブ構成とマルチマスターマルチスレーブ構成を実装します

現在シミュレーションしているのは、マスター スレーブ システム (ホスト 1 台とスレーブ 1 台)...

MySQLデータベースの基礎知識と操作のまとめ

この記事では、例を使用して、MySQL データベースの基本的な知識と操作について説明します。ご参考ま...

mysql のファイル mysql-bin.000001 とは何ですか? 削除できますか?

ポートを使用して MySQL をインストールした後、しばらくすると /var の容量が不足しているこ...

MySQL クラスター化インデックスのページ分割原理の分析例

この記事では、MySQL クラスター化インデックスのページ分割を例を使って説明します。ご参考までに、...

jsネイティブ構文プロトタイプ、__proto__、コンストラクタの徹底的な理解

目次1 はじめに2 前提条件2.1 データ型2.2 それが自身のプロパティであるかどうかを判断する ...

Win10 での MySQL 8.0.16 のインストールと設定のチュートリアル

1. MySQL 8.0.16を解凍する次の図に示すように、解凍後にdadaフォルダとmy.ini構...

CSS3 で Taobao に空白スペースを実装する方法

Taobao用の空白スペースを作成します。 ブラウザページを縮小すると、コンテンツ領域は縮小されませ...

Linux でネットワーク パケット損失と遅延をシミュレートする方法

netem と tc: netem は、Linux カーネル バージョン 2.6 以降で提供されるネ...

登録フォームのデザインルール

随分前に「Patterns for Sign Up & Ramp Up」を読み終えました。今...

TeamCenter12 にログインする際の 404/503 問題の解決方法

TeamCenter12はアカウントのパスワードを入力し、ログインをクリックすると、404または50...

Linux システムでの virtuoso データベースの詳細なインストールと使用

最近、リンク データについていくつか調査していて、rdf データベースを使用する必要があったため、v...

jsvc を使用して tomcat を起動する方法 (通常のユーザーとして実行)

jsvc の紹介実稼働環境では、Tomcat はデーモン モードで実行する必要があります。Tomc...

MySQL の NULL と空の文字列

最近、MySQL に触れました。昨日、テーブル構造情報を格納するための新しいテーブルを作成しました。...

Linux に mysql をインストールするときに /etc に my.cnf ファイルがない問題を解決する

今日、mysql ポートを変更したいと思ったのですが、/etc/ ディレクトリに my.cnf ファ...

TypeScript の基本型の紹介

目次1. 基本タイプ2. オブジェクトタイプ2.1 配列2.2 タプル2.3 オブジェクト3. 型推...