您好,登錄后才能下訂單哦!
問題描述:由于公司線上服務器和線上是完全分離的,但是有時候線上環境的測試或排錯還需要查看線上的數據庫,故這里給他們搭建了一個phpmyadmin的跳板機,通過該平臺可以連接線上的只讀庫;但是最近收到同事的反饋,查看表記錄的庫時候,發現操作很卡,特別是瀏覽庫下的表的時候,而此時線上只讀庫有一個在select count(*) from tbname的會話,主機IP就是phpmyadmin服務器,到這里就明白了,查看庫下的表的時候,phpmyadmin會顯示表行數,此操作嚴重拖累了phpmyadmin的響應,也問了百度和google,但是對于表數據量過多造成的phpmyadmin響應慢都沒有太好的解決方案,所以自己摸索了一下,嘗試修改一下phpmyadmin的源碼,故我這里的解決方案就是修改phpmyadmin的源碼,將'select count(*) from tbname'的SQL改寫。
上面已概述了問題,現在直奔主題,說說如何修改phpmyadmin源碼解決這個問題的。
基礎環境:
操作系統:Centos 6.5 x64位
phpmyadmin版本:ver 4.4.15.8
MySQL版本: 均為5.6.33
第一步: 既然我們知道是由于表行數統計造成,那么打開Table.class.php(phpmyadmin/libraries/Table.class.php)文件:
查找文件中的函數'static public function countRecords',修改內容大概在581行前后
原SQL如下:
'SELECT COUNT(*) FROM ' . PMA_Util::backquote($db) . '.' . PMA_Util::backquote($table)
由于查詢information_schema表的字段都是varchar類型,需要給字段value添加單引號,所以修改后的SQL如下:
'SELECT TABLE_ROWS FROM information_schema.TABLES where TABLE_SCHEMA = \'' . PMA_Util::backquote($db) . '\' and TABLE_NAME = \'' . PMA_Util::backquote($table) . '\''
第二步: 保存退出,然后重啟你的web服務apache或者nginx。
第三步: 登錄phpmyadmin,瀏覽庫下的表,直接秒開,完全無卡頓的現象了。
附注: 不過這時在庫下看到的表的紀錄數,除了多于50W行的表示顯示行數的,其余表行數都是0,這時由于libraries/config.default.php中的 $cfg['MaxExactCount'] = 500000參數設置導致,如果一定要顯示正確的表行數,可以把該參數設置為50000或者更低即可。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。