程序中使用now()函数对性能的影响

时间:2022-10-03 09:38:15

这两天从某平台的慢查询日志中发现了一些很简单的,原本执行时间在0.01-0.03s的SQL,慢查询日志中记录的执行时间在2s左右。

排查后发现,表设计及索引建设均没有什么问题。但是SQL语句中使用了now()函数。初步怀疑是高并发前提下,now()造成了性能瓶颈。

试验如下:

验证查询总量不变,并发率不同,总的执行时间差别

程序中使用now()函数对性能的影响

验证相同并发,相同执行条数,在使用now()和不使用now()的执行时间差

程序中使用now()函数对性能的影响

 

可见,now()在高并发的情况下,对数据库的性能会产生不良影响。原因是localtime函数会去调用/etc/localtime文件,引起底层库级别的锁冲突。解决方式是:

1.从代码层面获得系统当前时间

2.显示指定数据库的时区

程序中使用now()函数对性能的影响