使用phpmyadmin瀏覽庫結構很卡的問題的解決方案

  問題描述:由於公司線上服務器和線上是完全分離的,但是有時候線上環境的測試或排錯還需要查看線上的數據庫,故這裏給他們搭建了一個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或者更低即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章