2016-06-14 9 views
2

MySQLの公式文書では、これらの変数の説明にかなり混乱があります。それによるとMySQL - max_binlog_cache_size vs binlog_cache_size

max_binlog_cache_size手段、

トランザクションはメモリのこのバイト数よりも多くを必要とする場合は、 サーバーがストレージ以上の 「max_binlog_cache_size」バイトを必要と複数文のトランザクションを生成し、エラー。

max_binlog_cache_sizeは、トランザクション・キャッシュのサイズのみ

binlog_cache_size トランザクション中にバイナリログへの変更を保持するための手段

キャッシュのサイズを設定します。

binlog_cache_sizeは

ドキュメントを読んで、私は、これら2つの間に違いはありません観察トランザクション・キャッシュのサイズを設定します。ドキュメントの非常に混乱し、何かのように、

は、MySQL 5.7、binlog_cache_sizeシステム変数のmax_binlog_cache_size マッチのセッションへの視認性もあります。つまり、 の値を変更すると、 の値が変更された後に開始される新しいセッションにのみ影響します。

サーバー変数を照会すると、その両方が表示されます。私はのMySQL 5.6のMySQL 5.7を持っています。私が知る必要があるのは、どのサーバーに対してどの変数を検討して構成するかです。 ためため

binlog_cache_sizeのMySQL 5.6max_binlog_cache_sizeのMySQL 5.7

これらに関連するmax_binlog_stmt_cache_sizebinlog_stmt_cache_sizeは、追加的な混乱の変数にあります。

答えて

5

両方の変数を両方のバージョンで構成できますが、それらは異なる意味を持ちます。マニュアルとヘルプの定義は混乱しています。 http://dev.mysql.com/doc/refman/5.6/en/binary-log.html

binlog_cache_sizeは、バッファが使用できるメモリの最大量を定義します。トランザクションがこの値を超えると、一時ディスクファイルが使用されます。バッファには、接続ごとにが割り当てられます。

max_binlog_cache_sizeは、トランザクションの最大合計サイズを定義します。トランザクションがこの値より大きくなると、失敗します。

以下は、その違いの簡単な説明です。

セットアップ:

MariaDB [test]> select @@binlog_cache_size, @@max_binlog_cache_size, @@binlog_format; +---------------------+-------------------------+-----------------+ | @@binlog_cache_size | @@max_binlog_cache_size | @@binlog_format | +---------------------+-------------------------+-----------------+ | 32768 | 65536 | ROW | +---------------------+-------------------------+-----------------+ 1 row in set (0.01 sec) MariaDB [test]> show create table t1 \G *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `a` text ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec) 

1.トランザクションサイズは

@@ binlog_cache_sizeを下回っている

MariaDB [test]> flush status; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [test]> begin; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [test]> insert into t1 values (repeat('a',20000)); 
Query OK, 1 row affected (0.01 sec) 

MariaDB [test]> insert into t1 values (repeat('a',10000)); 
Query OK, 1 row affected (0.04 sec) 

MariaDB [test]> commit; 
Query OK, 0 rows affected (0.05 sec) 

MariaDB [test]> show status like 'Binlog_cache%'; 
+-----------------------+-------+ 
| Variable_name   | Value | 
+-----------------------+-------+ 
| Binlog_cache_disk_use | 0  | 
| Binlog_cache_use  | 1  | 
+-----------------------+-------+ 
2 rows in set (0.01 sec) 
(、トランザクションが成功するには、ディスクを使用しない、キャッシュを使用しています)

2.トランザクションサイズは@@ binlog_cache_size、b

(トランザクションがキャッシュを使用し、キャッシュはディスクを使用しています)

MariaDB [test]> flush status; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [test]> begin; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [test]> insert into t1 values (repeat('a',20000)); 
Query OK, 1 row affected (0.10 sec) 

MariaDB [test]> insert into t1 values (repeat('a',20000)); 
Query OK, 1 row affected (0.10 sec) 

MariaDB [test]> commit; 
Query OK, 0 rows affected (0.03 sec) 

MariaDB [test]> show status like 'Binlog_cache%'; 
+-----------------------+-------+ 
| Variable_name   | Value | 
+-----------------------+-------+ 
| Binlog_cache_disk_use | 1  | 
| Binlog_cache_use  | 1  | 
+-----------------------+-------+ 
2 rows in set (0.01 sec) 

3.トランザクションのサイズが

をmax_binlog_cache_size @@超える(トランザクションが失敗した)@@ max_binlog_cache_size

の下ユタ

MariaDB [test]> flush status; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [test]> begin; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [test]> insert into t1 values (repeat('a',20000)); 
Query OK, 1 row affected (0.12 sec) 

MariaDB [test]> insert into t1 values (repeat('a',20000)); 
Query OK, 1 row affected (0.15 sec) 

MariaDB [test]> insert into t1 values (repeat('a',20000)); 
Query OK, 1 row affected (0.12 sec) 

MariaDB [test]> insert into t1 values (repeat('a',20000)); 
ERROR 1197 (HY000): Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again 

したがって、トランザクションが大きいにもかかわらず接続が多すぎる場合は、過剰なディスク書き込みを避けるために、@@ binlog_cache_sizeを増やしたい場合があります。

同時接続が多数ある場合は、キャッシュに同時に多くのメモリを割り当てようとすると接続が慎重に行われないように注意してください。

トランザクションが大きくなりすぎないようにしたい場合は、@@ max_binlog_cache_sizeを制限することができます。

@@ binlog_stmt_cache_sizeと@@ max_binlog_stmt_cache_sizeは同様に動作する必要があり、差は%binlog_cache%値は、トランザクション更新のためのものであり、非トランザクション更新の%binlog_stmt_cache%であることです。

実験中、値は100%正確ではないことに注意してください。最初に割り当てられたサイズの隠された微妙な要素があります。実用上は問題ありませんが、低い値でプレイすると混乱することがあります。

関連する問題