⑴ mysql 多表連接查詢速度超級慢
問題
我們有一個 SQL,用於找到沒有主鍵 / 唯一鍵的表,但是在 MySQL 5.7 上運行特別慢,怎麼辦?
實驗
我們搭建一個 MySQL 5.7 的環境,此處省略搭建步驟。
寫個簡單的腳本,製造一批帶主鍵和不帶主鍵的表:
可以看到執行時間變成了 0.67s。
整理
我們診斷的關鍵點如下:
1. 對於 information_schema 中的元數據表,執行計劃不能提供有效信息。
2. 通過查看 MySQL 改寫後的 SQL,我們猜測了優化器發生了誤判。
3. 我們增加了 hint,指導 MySQL 正確進行優化判斷。
但目前我們的實驗僅限於猜測,猜中了萬事大吉,猜不中就無法做出好的診斷。
⑵ MySql資料庫響應速度慢的問題。
1、看下開了打開資料庫連接之後是否有及時關閉;
2、sql語句是否需要優化;
3、查詢語句添加索引
⑶ mysql資料庫突然變慢 資料庫變慢是什麼原因
MySQL 在崩潰恢復時,會遍歷打開所有 ibd 文件的 header page 驗證數據字典的准確性,如果 MySQL 中包含了大量表,這個校驗過程就會比較耗時。 MySQL 下崩潰恢復確實和表數量有關,表總數越大,崩潰恢復時間越長。另外磁碟 IOPS 也會影響崩潰恢復時間,像這里開發庫的 HDD IOPS 較低,因此面對大量的表空間,校驗速度就非常緩慢。另外一個發現,MySQL 8 下正常啟用時居然也會進行表空間校驗,而故障恢復時則會額外再進行一次表空間校驗,等於校驗了 2 遍。不過 MySQL 8.0 里多了一個特性,即表數量超過 5W 時,會啟用多線程掃描,加快表空間校驗過程。
如何跳過校驗MySQL 5.7 下有方法可以跳過崩潰恢復時的表空間校驗過程嘛?查閱了資料,方法主要有兩種:
1. 配置 innodb_force_recovery可以使 srv_force_recovery != 0 ,那麼 validate = false,即可以跳過表空間校驗。實際測試的時候設置 innodb_force_recovery =1,也就是強制恢復跳過壞頁,就可以跳過校驗,然後重啟就是正常啟動了。通過這種臨時方式可以避免崩潰恢復後非常耗時的表空間校驗過程,快速啟動 MySQL,個人目前暫時未發現有什麼隱患。2. 使用共享表空間替代獨立表空間這樣就不需要打開 N 個 ibd 文件了,只需要打開一個 ibdata 文件即可,大大節省了校驗時間。自從聽了姜老師講過使用共享表空間替代獨立表空間解決 drop 大表時性能抖動的原理後,感覺共享表空間在很多業務環境下,反而更有優勢。
臨時冒出另外一種解決想法,即用 GDB 調試崩潰恢復,通過臨時修改 validate 變數值讓 MySQL 跳過表空間驗證過程,然後讓 MySQL 正常關閉,重新啟動就可以正常啟動了。但是實際測試發現,如果以 debug 模式運行,確實可以臨時修改 validate 變數,跳過表空間驗證過程,但是 debug 模式下代碼運行效率大打折扣,反而耗時更長。而以非 debug 模式運行,則無法修改 validate 變數,想法破滅。
⑷ 為什麼連接本地mysql資料庫很慢
有兩個myslq資料庫,分別裝在了兩個伺服器上,即210&249;
其他伺服器上連接資料庫,發現249的資料庫連接很慢,而210正常;結果是:249資料庫出了問題。
嘗試的解決辦法:1.重啟apache (在/usr/local/apache/bin 下 apachectl -k restart) 不管用;2.重啟資料庫所在伺服器(在Linux下輸入reboot)不管用;
3.在網上搜帖子「連接mysql資料庫速度很慢的原因,發現mysql就會試圖去解析來訪問的機器的domain name,在經歷一段時間後才取出數據.在網上找了很久才發現,一個參數:skip-name-resolve,在mysql的配置文件my.cnf中,在[mysqld]下面加上這個配置就可以了.前不久斷網時登錄內類系統後台奇慢的問題,也是由這個原因引起的。」
首先找到mysql的配置文件my.cnf,在/etc/下,按照帖子的方法,修改【mysqld】,加上了skip-name-resolve;然後重啟MySQL,先關閉:在/bin/下 mysqladmin -uroot -p密碼 shutdown, ps aux|grep mysql 觀察mysql是否被關閉,啟動:mysqld_safe &;重啟過後,管用
訪問速度很快~~
這里推薦安全的重啟方法
$mysql_dir/bin/mysqladmin -u root -p shutdown
$mysql_dir/bin/safe_mysqld &
mysqladmin和mysqld_safe位於Mysql安裝目錄的bin目錄下,很容易找到的。
⑸ 為什麼第一次連接mysql資料庫很慢
兩種可能
第一是 機器本身有太多的進程或者服務導致cpu佔有兩次太高 或者硬碟老化 冗餘數據較多 查詢結果緩慢
第二還有可能是 mysql的設置或者sql語句本身的問題了 看是哪方面的。
⑹ PHP訪問mysql資料庫巨慢,請求幫助
1. 找到你mysql的安裝目錄,打開my.ini,如果是Linux伺服器,那就是my.conf;
2.然後在[mysqld]選項下面添加:
skip-name-resolve
這個選項的意思是:禁用DNS解析,連接速度會快很多。
然後保存,重啟mysql伺服器,希望能幫你解決問題!