Django:你怎么能阻止长查询杀死你的数据库?

Pau*_*jan 6 python mysql django timeout

我正在使用Django 1.1和Mysql 5.*以及MyISAM表.

我的一些查询可能需要花费大量时间来处理数据集中的异常值.这些锁定表并关闭站点.其他时候似乎有些用户在完成之前取消了请求,并且一些查询将停留在"准备"阶段,锁定所有其他查询.

我将尝试追踪所有角落的情况,但很高兴有一个安全网,所以网站不会下降.

我该如何避免这种情况?我可以设置最长查询时间吗?

Nic*_*tin 1

不幸的是,MySQL 不允许您通过简单的方法来避免这种情况。一种常见的方法基本上是编写一个脚本,每隔 X 秒检查一次所有正在运行的进程(基于您认为的“长”),并杀死它认为运行时间过长的进程。不过,您至少可以通过log_slow_queries在 MySQL 中进行设置来获得一些基本的诊断,该设置会将所有耗时超过 10 秒的查询写入日志。如果这对于您认为“慢”的目标来说太长,您可以设置long_query_time为 10 以外的值来更改阈值。