mysql消息队列满的时候怎么处理

mysql消息队列满的时候怎么处理,第1张

① 请求消息处理线程

负责端口监听,如果有新连接进入则验证连接合法性,如果成功则加入连接池,连接池只能容纳一定量的连接

监听连接池中所有连接是否有消息输入,如果有则读取请求消息

处理连接非协议性关闭(如断电)

② 将请求消息写入消息队列

这时必须换过消息格式,在原来的消息头中加入进队列的时间戳和所属连接。

③ 通知连接无法处理请求

由于消息队列可容纳的消息个数有限,并且消息队列是循环可丢弃型的,只有在消息处理线程组太忙而客户又有大量请求进来时才须要抛弃最旧的消息。在抛弃最旧消息时查一下时间戳,如果未超时则可产生一个‘系统太忙未处理请求’的结果消息加到结果队列去。

如果消息队列已满,可以考虑动态增加处理线程的个数,但处理线程组的个数必须是有限的。

通常情况下,当mysql数据库存储空间满了,就会导致网站内部沟通的异常,只能读出不能写入。具体表现为:一些源码程序的网站后台打不开,比如dede织梦程序;或者导致一些文章的资源发布失败,比如wordpress程序一般管理后台可以打开,但就是发布不了文章。当我们遇到管理后台突然打不开了,或者突然发布文章失败,就要有意识地怀疑是不是数据库满了还是连接出现了什么问题。

使用

unbuffered

cursor

可以避免内存问题。

cursor

默认使用

buffered

模式。这种模式会把所有结果集返回并载入内存。如果结果集很大的话,内存会爆。

unbuffered

cursor

是每次只将下一行结果返回,内存占用很小。不过这种模式缺点很多,所以没有作为默认的模式。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8565114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存