両方の変数を両方のバージョンで構成できますが、それらは異なる意味を持ちます。マニュアルとヘルプの定義は混乱しています。 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%正確ではないことに注意してください。最初に割り当てられたサイズの隠された微妙な要素があります。実用上は問題ありませんが、低い値でプレイすると混乱することがあります。