mariadb make_query()调用中的make_query stucks

syqv5f0l  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(224)

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++

wixjitnu

wixjitnu1#

您可以从一个新的子线程调用这个方法,让父线程等待它直到超时,或者如果它没有及时返回,父线程可以终止它。不是一个干净的方法,但会解决你的问题。事实上,您可以抽象这个机制,以便将来对mariadb进行更新时,您可以删除helper子线程。

yb3bgrhw

yb3bgrhw2#

在mariadb中,请参见 max_statement_time 以及其他技术
(这里提到的许多东西在mysql中是不可用的。)

相关问题