Mysql本地执行快,测试也快,生产贼慢(已解决)
引出問題
一個很簡單的sql,生產環境查詢竟然要這么久
我本地只需要0.2s,測試環境也只需要不到1秒鐘。
這差距也太大了。
執行的sql如下:
前置說明:
其中 line_no、date_day 是加了聯合索引的,類型都是varchar。
detain_flag,reserve_flag,into_type,out_type,usable_flag類型為int(1)和varchar(30)
目前是6臺機器上有mysql集群。
表中有50萬數據,符合條件是3萬,表數據大小是160M。
對比
如果只執行
select date_day from table where line_no='11' and date_day BETWEEN '2021-01' nd '2022-02';是很快的。
但是執行
select date_day,detain_flag,reserve_flag,into_type,out_type,usable_flag from plan_train_use_schedule where line_no='11' and date_day BETWEEN '2021-05' and '2022-03';后依然很慢,
差別就是返回的字段中多了幾個。
然后又這樣執行
select `code` from plan_train_use_schedule where line_no='13' and date_day BETWEEN '2021-05' and '2022-03' and is_del=0 AND type=1;后依然很慢,
差別就是查詢的條件中字段中多了幾個。
我的猜想
我猜是因為回表導致的慢,但是這特娘的也太慢了吧,其他庫有個600萬數據的表,是很快的。我這個庫有毒?
這兩個命令能查出如下圖的數據,需要先執行你的sql,然后下面的命令依次執行
show profiles;
show profile for query 26;
我現在懷疑是跟緩沖池大小有關,因為本地跟測試相對來講沒人用,所以默認的125M內存夠用了,但是生產環境一直在用,所以發生回表操作的話需要把數據重新刷進去的,所以導致慢。但是需要重啟mysql,暫且沒試,查詢的命令是:
show variables like ‘%query_cache%’;
show variables like ‘innodb_buffer_pool%’;
如圖,Mysql的配置都是默認的。感覺有點坑爹。
我想改下試試。但是需要重啟,不好操作。
分割線 2022年1月12日13:25:20
以下操作可能需要參考這篇文章:
win10查找Mysql5.6版本的配置文件my.ini并修改innodb_buffer_pool_size
雖然生產不好操作,但是我自己電腦可以操作哇。
我查了下自己電腦Mysql的配置
show variables like ‘innodb_buffer_pool%’;
結果為
innodb_buffer_pool_instances = 8
innodb_buffer_pool_size = 125M
此時查詢速度很快的,0.2秒,配置為125M
然后我改了下,查詢速度需要20+秒,配置為6M
然后我又改了下,變成2G,查詢只要0.01秒,配置為2G
可以看到明顯的差別。
只等去生產環境試一下看是否解決問題了。
完美解決,吼吼 2022年1月12日14:23:51
此時生產環境一臺機器配置如下
執行sql查詢時間為0.4秒,不吹牛逼,這特么的提升了100倍是有的
序1
2022年9月26日17:08:09
今天遇到的問題,使用navcat 查詢很慢, 但是登錄到服務器去執行同樣的sql是正常的。懷疑是網絡問題造成的。
總結
以上是生活随笔為你收集整理的Mysql本地执行快,测试也快,生产贼慢(已解决)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Adobe Illustrator CS
- 下一篇: 性能测试工程师技术履历表