検索

この記事は、mysql に関する関連知識を提供します。主にロールバック関連の問題を整理し、主にブックストアのロールバックとロールバック メカニズムを紹介します。一緒に見てみましょう。皆さんが助けてくれることを願っています。

MySQL ロールバック (概要共有)

推奨学習: mysql ビデオ チュートリアル

大規模なテーブルを操作すると、操作時間が長すぎたり、オンラインに影響を与える ビジネスでは、大規模なテーブル操作をロールバックする必要があります。大規模なテーブル操作を停止した後、ロールバックを待つのは非常に長いプロセスです。時間を短縮する方法をいくつか知っていて、実稼働環境でのデータの整合性に懸念を抱いているかもしれませんが、介入しないことを選択することもできます。

トランザクション ロールバック

トランザクションはリレーショナル データベースの実行単位であり、最終段階のコントロールを通じて送信またはロールバックできます。整合性が保証できないさまざまなシナリオでロールバック操作を実行します。 MySQL でのロールバックは、トランザクションに関連する最新の変更を元に戻す方法に関する情報が含まれる元に戻すログを通じて実行されます。 Undo ログは Undo ログ セグメントに存在し、Undo ログ セグメントはロールバック セグメントに含まれます。ロールバック セグメントは、UNDO 表スペースおよびグローバル Temporary 表スペースに配置されます。
関係は次のとおりです。

MySQL ロールバック (概要共有)

  • undo ファイル

    MySQL ロールバック (概要共有)

mysql > show variables like '%undo%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| innodb_max_undo_log_size | 1073741824         |
| innodb_undo_directory    | /opt/data8.0/mysql |
| innodb_undo_log_encrypt  | OFF                |
| innodb_undo_log_truncate | ON                 |
| innodb_undo_tablespaces  | 2                  |
+--------------------------+--------------------+
5 rows in set (0.00 sec)

は、次のことを指します。グローバル Temporary ユーザー作成の一時テーブルに対する変更のロールバック セグメントを格納する一時テーブルスペース (ibtmp1)。

MySQL ロールバック (概要共有)

mysql > SELECT @@innodb_temp_data_file_path;
+-------------------------------+
| @@innodb_temp_data_file_path  |
+-------------------------------+
| ibtmp1:128M:autoextend:max:30G |
+-------------------------------+

ロールバックに含まれるファイルを理解したら、読み続けてください。

ロールバック メカニズム:

MySQL ロールバック制御は内部 innodb エンジンによって調整され、人間が制御するメカニズムは提供されません。現在提供されている MySQL ロールバック パラメータは次のとおりです:

mysql> SHOW VARIABLES LIKE  '%ROLL%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| innodb_rollback_on_timeout | OFF   |
| innodb_rollback_segments   | 128   |
+----------------------------+-------+

innodb_rollback_on_timeout:

デフォルトでは、InnoDB はトランザクションがタイムアウトしたときにのみ最後のステートメントをロールバックします。 --InnoDB -rollback-on-timeout が指定されている場合、トランザクション タイムアウトにより InnoDB が中止され、トランザクション全体がロールバックされます。ロールバックなどの指定された時間が経過すると、デフォルトでオフになります。データに不整合が生じる可能性が考えられます。この方法はお勧めできません。

Innodb_rollback_segments (1~128):

各 UNDO 表スペースに割り当てられるロールバック セグメントの数と、UNDO レコードを生成するトランザクションに割り当てられるグローバル一時表スペースの数を定義します。
ロールバック セグメントでサポートされるトランザクションの数: ロールバック セグメントのアンドゥ スロットの数と、各トランザクションに必要なアンドゥ ログの数によって異なります。

公式に提供されるロールバックのアンドゥ スロットの数セグメントは InnoDB に基づいています ページ サイズ関連:

MySQL ロールバック (概要共有)

最新の MySQL8.0.27 ソース コード実装より storage\innobase\include\trx0rseg.h:

/* Number of undo log slots in a rollback segment file copy 
这里 UNIV_PAGE_SIZE正常页面的大小  即 1024*/
#define TRX_RSEG_N_SLOTS (UNIV_PAGE_SIZE / 16)

/* Maximum number of transactions supported by a single rollback segment 
单个回滚段支持的最大事务数1024/2=512
*/
#define TRX_RSEG_MAX_N_TRXS (TRX_RSEG_N_SLOTS / 2)

デフォルトではページ 1024 スロット (TRX_RSEG_N_SLOTS) に分割されており、各スロットがアンドゥ ログ オブジェクトに対応するため、理論上 InnoDB は 128 * 512 = 65536 個の通常トランザクションをサポートできます。
原則的な部分については、「MySQL」「エンジン機能」「InnoDB undo ログ ローミング」を参照してください。
undbo ロールバックの同時読み取りおよび書き込みシナリオを正式に提供します。

MySQL ロールバック (概要共有)

から戻るアピールの原則 実際のアプリケーション シナリオでは:
ロールバック セグメントをサポートする機能は依然として相当なものですが、ロールバックの大規模なバッチを実行すると非常に遅くなることがよくあります。特にオンライン処理中は、100,000 行をロールバックするのに 10 分かかる場合があります。あるいはそれ以上です。
以下では、sysbench を使用して 5,000 万の単一テーブル データを準備します。無負荷状態で、約 1 分間削除してから、kill -9 を使用してトランザクションを強制停止し、トランザクションをロールバックします。

MySQL ロールバック (概要共有)

明らかに再起動の効果が優れています。
ただし、kill -9 メソッドはデータ ページを簡単に破損する可能性があり、大きなリスクがあります。日常生活でもデータベースに負荷がかかるため、大規模なトランザクションをロールバックするコストが非常に高額になることが想像できます。

概要

大規模なロールバック操作はできる限り回避する必要があります。これはデータベースのリソースとパフォーマンスを消費し、実稼働環境で重大な実稼働事故につながる可能性があります。大規模なトランザクションのロールバックを回避できない場合は、次の方法を実行できます。

  • バッチ操作の場合は、バッチで送信できます。たとえば、
  • UNDO 領域と 1,000 ~ 5,000 行のグローバル一時テーブル領域を適切に調整できます。 4 つの元に戻すファイルを使用し、1G グローバル ibtmp1 を初期化することをお勧めします。高可用性環境でデータの一貫性を確保すると、スレーブを新しいマスターに昇格させ、サービスを提供し、大規模なトランザクションがロールバックされるのを待つことができます。
  • 極端な場合には、kill -9 を使用して操作を再開できます。データの量が非常に多いため、mysql のリカバリは遅くなります。この時点では、mysql がクラッシュ リカバリを実行するまで待つ必要があります。
  • データ ページが破損している場合、または再起動プロセス中にロールバックがスキップされた場合は、innodb_force_recovery=3 を渡すことができます (トランザクション ロールバック操作は実行されません)。 )
  • 推奨学習:
mysql ビデオ チュートリアル

以上がMySQL ロールバック (概要共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
MySQLでビューを使用することの限界は何ですか?MySQLでビューを使用することの限界は何ですか?May 14, 2025 am 12:10 AM

mysqlviewshavelimitations:1)supportallsqloperations、制限、dataManipulationswithjoinsorubqueries.2)それらは、特にパフォーマンス、特にパルフェクソルラージャターセット

MySQLデータベースのセキュリティ:ユーザーの追加と特権の付与MySQLデータベースのセキュリティ:ユーザーの追加と特権の付与May 14, 2025 am 12:09 AM

reperusermanmanagementInmysqliscialforenhancingsecurationsinginuring databaseaperation.1)usecreateusertoaddusers、指定connectionsourcewith@'localhost'or@'% '。

MySQLで使用できるトリガーの数にどのような要因がありますか?MySQLで使用できるトリガーの数にどのような要因がありますか?May 14, 2025 am 12:08 AM

mysqldoes notimposeahardlimitontriggers、しかしpracticalfactorsdeTerminetheireffectiveuse:1)serverconufigurationStriggermanagement; 2)complentiggersincreaseSystemload;

mysql:Blobを保管しても安全ですか?mysql:Blobを保管しても安全ですか?May 14, 2025 am 12:07 AM

はい、それはssafetostoreblobdatainmysql、butonsiderheSeCactors:1)Storagespace:blobscanconsumesificantspace.2)パフォーマンス:パフォーマンス:大規模なドゥエットブロブスメイズ階下3)backupandrecized recized recized recize

MySQL:PHP Webインターフェイスを介してユーザーを追加しますMySQL:PHP Webインターフェイスを介してユーザーを追加しますMay 14, 2025 am 12:04 AM

PHP Webインターフェイスを介してMySQLユーザーを追加すると、MySQLI拡張機能を使用できます。手順は次のとおりです。1。MySQLデータベースに接続し、MySQLI拡張機能を使用します。 2。ユーザーを作成し、CreateUserステートメントを使用し、パスワード()関数を使用してパスワードを暗号化します。 3. SQLインジェクションを防ぎ、MySQLI_REAL_ESCAPE_STRING()関数を使用してユーザー入力を処理します。 4.新しいユーザーに権限を割り当て、助成金ステートメントを使用します。

MySQL:BLOBおよびその他のNO-SQLストレージ、違いは何ですか?MySQL:BLOBおよびその他のNO-SQLストレージ、違いは何ですか?May 13, 2025 am 12:14 AM

mysql'sblobissuitable forstoringbinarydatawithinarationaldatabase、whileenosqloptionslikemongodb、redis、andcassandraofferferulesions forunstructureddata.blobissimplerbutcanslowdowdowd withwithdata

MySQLユーザーの追加:構文、オプション、セキュリティのベストプラクティスMySQLユーザーの追加:構文、オプション、セキュリティのベストプラクティスMay 13, 2025 am 12:12 AM

toaddauserinmysql、使用:createuser'username '@' host'identifidedby'password '; here'showtodoitsely:1)chosehostcarefilytoconを選択しますTrolaccess.2)setResourcelimitslikemax_queries_per_hour.3)usestrong、uniquasswords.4)endforcessl/tlsconnectionswith

MySQL:文字列データ型の一般的な間違いを回避する方法MySQL:文字列データ型の一般的な間違いを回避する方法May 13, 2025 am 12:09 AM

toavoidcommonMonmistakeswithStringDatatypesinmysql、undultingStringTypenuste、choosetherightType、andManageEncodingandCollat​​ionsEttingtingive.1)U​​secharforfixed-LengthStrings、Varcharforaible Length、AndText/Blobforlardata.2)setCurrectCherts

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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

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

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 Mac版

SublimeText3 Mac版

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

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。