繁体   English   中英

MariaDB系统变量引用哪些数据,例如innodb_log_buffer_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倍?

Innodb_log_buffer_size

它指的是内部的东西。 事务记录到重做日志(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_buffer_pool_size

您的数据很小,缓冲池足够大。 缓冲池是innodb缓存数据的方式。 如果您的数据大于bufferpool(在您的情况下不是),则Innodb将需要更频繁地从磁盘读取数据。 因此,请保持原样,或者可以使其更小。

max_allowed_pa​​cket的

这只是一种安全措施,旨在防止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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM