![](/img/trans.png)
[英]difference between innodb_log_buffer_size and innodb_buffer_pool_size
[英]What data do the MariaDB system variables refer to e.g. innodb_log_buffer_size
许多MariaDB系统变量定义了最大数据大小,在通过JDBC发送大量数据的写操作的上下文中,我不清楚确切地测量了哪些数据,例如:
innodb_buffer_pool_size
= 24696061952
和
innodb_log_buffer_size
= 8388608
和
max_allowed_packet
= 562036736
我使用基准测试,在其中插入,更新或删除具有2MB原始数据(即日期和双精度数据)的50000行。
因此,当MariaDB实现这些变量定义的限制时,它是查看通过网络发送的参数的原始值,还是也包含所有SQL字符串?
即它只是测量
2012-01-01,0.1234
2012-01-02,0.4321
2012-01-03,0.9999
...
还是考虑SQL字符串中的字节:
UPDATE data SET value = 0.1234 WHERE date = '2012-01-01'
UPDATE data SET value = 0.4321 WHERE date = '2012-01-02'
UPDATE data SET value = 0.9999 WHERE date = '2012-01-03'
在此示例中,哪个明显大2到3倍?
它指的是内部的东西。 事务记录到重做日志(ib_logfile0 / ib_logfile1)中。 重做日志记录将缓冲在重做日志缓冲区中,直到提交事务为止。重做日志记录的格式未记录,并且在两个版本之间可能有所更改。 您可以通过观察innodb_os_log_writer状态变量的更改来查看写入日志的数量。
MariaDB [test]> show global status like 'innodb_os_log_written';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Innodb_os_log_written | 12800 |
+-----------------------+-------+
1 row in set (0.00 sec)
您的数据很小,缓冲池足够大。 缓冲池是innodb缓存数据的方式。 如果您的数据大于bufferpool(在您的情况下不是),则Innodb将需要更频繁地从磁盘读取数据。 因此,请保持原样,或者可以使其更小。
这只是一种安全措施,旨在防止DDOS。 如果发送非常大的数据包,它们会使服务器分配更多的内存,甚至可能用完内存。 但是,如果不发送大数据包,则服务器不会分配大量内存,并且如果您不怕DDOS,则可以将其扩展到1G。
为了了解在服务器端发送或接收了多少数据,您可以查看状态变量
MariaDB [test]> show status like 'bytes%';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| Bytes_received | 570 |
| Bytes_sent | 1716 |
+----------------+-------+
2 rows in set (0.00 sec)
这与您发送的数据大小如何对应? 并非总是有一个简单的答案。
如果您只是发送未准备好的查询,则将发送4字节的数据包头+ 1字节的命令(COM_QUERY)+ SQL查询字符串。 如果查询大于16M,它将被分为多个数据包,每个数据包有4个字节的开销。
使用服务器端准备好的语句会更加复杂。 每个数据类型都有其自己的编码。 ,因此整数不会以文本,浮点数或日期的形式发送。 字符串仍然作为字符串发送。 通常,发送的数据量会小一些(毕竟,您仅发送数据就不发送SQL命令)。
MariaDB 10.2服务器和JDBC还进行了优化,可以为单个准备好的语句发送多个数据。 这样可以减少客户端发送的数据量(一点),但是客户端接收的数据量将大大减少,所有命令只是单个数据包,而不是每个命令一个。 此优化不适用于DELETE。
对于批处理未在服务器端准备好的语句,JDBC进行了另一项优化,该优化将许多类似的INSERT查询转换为一个多插入,这也减少了发送和接收的字节数,但这仅是INSERT(现在是一项对DELETE执行类似操作的任务)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.