今天論壇打開了這個會話功能,結果很榮幸踩坑裏了,連接數直接給幹到2000開外。
好了,直接上圖說下:
show processlist,滿屏顯示這條SQL,情急之下,立即pt-kill,先讓論壇活下來。順便想問候下discuz開發,你們真的做了測試了嗎,就直接發佈了?
表結構:
mysql> desc pre_common_session; +--------------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+----------------------+------+-----+---------+-------+ | sid | char(6) | NO | PRI | | | | ip1 | tinyint(3) unsigned | NO | | 0 | | | ip2 | tinyint(3) unsigned | NO | | 0 | | | ip3 | tinyint(3) unsigned | NO | | 0 | | | ip4 | tinyint(3) unsigned | NO | | 0 | | | uid | int(11) unsigned | NO | MUL | 0 | | | username | char(50) | NO | | | | | groupid | smallint(6) unsigned | NO | | 0 | | | invisible | tinyint(1) | NO | | 0 | | | action | tinyint(1) unsigned | NO | | 0 | | | lastactivity | int(10) unsigned | NO | | 0 | | | lastolupdate | int(10) unsigned | NO | | 0 | | | fid | int(11) unsigned | NO | | 0 | | | tid | int(11) unsigned | NO | | 0 | | +--------------+----------------------+------+-----+---------+-------+ 14 rows in set (0.00 sec)
由於該SQL導致全表掃描,雖然表數據不多1萬多行,但InnoDB引擎在沒有使用到索引的情況下,會轉爲表級鎖,併發一大,線程處理不完,連接不釋放,連接數就會上升。
最終讓開發在後臺關閉該功能,解決之。