我有一个运行在docker容器下的mariadb:10.10.6
。我正在使用该数据库的java微服务中运行一些测试,我想记录java客户端发送到数据库的确切查询。
我尝试将配置文件设置为:
general_log = ON
general_log_file = /var/log/mysql/general.log
log_slow_verbosity = full
字符串
但是general日志文件仍然在insert语句中带有?,我有很多理由相信它正在压缩它:
事
254 Close stmt
254 Prepare insert into announce_images (announce_id, image) values (?, ?)
254 Execute insert into announce_images (announce_id, image) values (?, ?)
型
我试图使用java持久性提供程序进行批量插入,我非常希望看到一个日志显示
insert into announce_images (announce_id, image) values (?, ?) (?, ?) (?, ?) (?, ?) (?, ?) (?, ?) (?, ?) (?, ?) (?, ?)
型
因此我可以保证持久性提供程序确实在进行批插入。
我怎么能得到一个更完整准确的日志mariadb
1条答案
按热度按时间xfyts7mz1#
与MariaDB Connector/Python一样,MariaDB Java Connector使用二进制协议(预处理语句)进行批处理操作。
二进制协议的使用通过减少调用的数量以及SQL语句所需的数据库往返次数,速度快了10倍:
首先,它发送COM_STMT_EXECUTE命令(包含SQL语句),然后是COM_STMT_EXECUTE命令(包含行数,然后是所有数据)。此方法不需要重写SQL语句(使用VALUES(),(),()语法),也适用于SQL和UPDATE批处理操作。
要检查持久性提供程序是否真的在进行批量插入,有两种可能的解决方案:
示例(具有2行的批次):
字符串
;