mariadb版本:10.2.12-6。
当我的远程mariadb重新启动(或类似操作)时,我的db查询永远卡在read中。gdb堆栈跟踪确认读卡:
# 0 0x00007fe14b46d7ad in read () from /lib64/libpthread.so.0
# 1 0x00007fe14d922935 in sock_read () from /lib64/libcrypto.so.10
# 2 0x00007fe14d92099b in BIO_read () from /lib64/libcrypto.so.10
# 3 0x00007fe14dc99fe4 in ssl3_read_n () from /lib64/libssl.so.10
# 4 0x00007fe14dc9b87d in ssl3_read_bytes () from /lib64/libssl.so.10
# 5 0x00007fe14dc98304 in ssl3_read_internal () from /lib64/libssl.so.10
# 6 0x00007fe14e11eb6d in ma_tls_read () from /lib64/libmysqlclient.so.18
# 7 0x00007fe14e10dd91 in ma_pvio_read () from /lib64/libmysqlclient.so.18
# 8 0x00007fe14e10dff3 in ma_pvio_cache_read () from /lib64/libmysqlclient.so.18
# 9 0x00007fe14e1041be in ma_real_read () from /lib64/libmysqlclient.so.18
# 10 0x00007fe14e104fdc in ma_net_read () from /lib64/libmysqlclient.so.18
# 11 0x00007fe14e109d5e in ma_net_safe_read () from /lib64/libmysqlclient.so.18
# 12 0x00007fe14e10cfe5 in mthd_my_read_query_result () from /lib64/libmysqlclient.so.18
# 13 0x00007fe14e563987 in make_query (
query=0x7fe128ff8500 "update heartbeat set .........") at*****:2600
# 14 0x000000000041691d in*******(short, unsigned char*) ()
# 15 0x0000000000415761 in*******(void*) ()
# 16 0x00007fe14b466dd5 in start_thread () from /lib64/libpthread.so.0
# 17 0x00007fe14b190b3d in clone () from /lib64/libc.so.6
我试图找到是否有任何方法可以在mysql/mariadb的make_query()调用中设置超时,但找不到任何方法。有人知道如何配置make\u query()超时吗?
注:所用编程语言为c、c++
2条答案
按热度按时间wixjitnu1#
您可以从一个新的子线程调用这个方法,让父线程等待它直到超时,或者如果它没有及时返回,父线程可以终止它。不是一个干净的方法,但会解决你的问题。事实上,您可以抽象这个机制,以便将来对mariadb进行更新时,您可以删除helper子线程。
yb3bgrhw2#
在mariadb中,请参见
max_statement_time
以及其他技术(这里提到的许多东西在mysql中是不可用的。)