mysql开发java心得_关于mysql 一些优化心得
先介紹下服務器架構及配置8核8G,10M帶寬Centos6.5 64
Nginx? ?1.8.1PHP? ?? ?5.3.29Mysql? ? 5.5.42
一電商網站后臺查詢訂單時 經常php超時,導致php報錯以下是排查過程
1、php執行超時,首先我們想到的就是php.ini文件中max_execution_time =??#把默認的值調整了下
2、然后在后臺執行訂單查詢php不報錯了,但是查詢耗時較長,用時65s.??而且一些表成鎖死狀態碎片比較多,本人對mysql數據庫優化不是很了解,于是請教了銘哥下,銘哥給出的答復是:一般mysql調優主要是根據慢查詢日志去優化sql語句,my.cnf里面沒啥可調的。 下面就是分析mysql慢日志,調整參數3、mysql參數優化,主要調整的參數如下。根據機器性能來調整,如果你對參數不是很了解,建議不要盲目的調
把一些配置文件修改好后重啟相關服務,由原來的65s變成了十幾秒。效果還是不是很理想,查看了下mysql默認引擎為MyISAM,決定把引擎改為Innodb
1、導出shop數據庫的表結構mysqldump -d -uxxx -p shop > shop_table.sql其中-d參數表示不導出數據,只導出表結構
2、替換shop_table.sql里的MyISAM為INNODBsed -i 's/MyISAM/INNODB/g' shop_table.sql3、新建數據庫shop_new,并導入表結構mysql > create database shop_new;mysql -uroot -p shop_new < shop_table.sql可以通過show table status來檢查表引擎是否為INNODB。
4、導出shop的數據mysqldump -t -uroot -p shop > shop_data.sql其中-t參數表示只導數據,不導表結構
5、導入數據到shop_newmysql -uroot -p shop_new < shop_data.sql
6、 首先開啟慢日志,修改/etc/my.cnf??增加以下兩段配置,保存重啟mysql
vim /etc/my.cnf
long_query_time = 2
log_slow_queries = /data/mysql/slow.log
service mysqld restart? ?##重啟mysql服務
7、查看慢日志來定位mysql哪條語句執行慢,然后建立索引,優化sql執行語句。
tail -n20 /data/mysql/slow.log? ?#查看20行
# Time: 160303 12:12:38
# User@Host: root[root] @??[10.165.34.182]
# Query_time: 10.145685??Lock_time: 0.000395 Rows_sent: 1??Rows_examined: 24306970
use shop;
SET timestamp=1456978358;
SELECT COUNT(*) FROM `shop`.`ecs_order_info` o LEFT JOIN`shop`.`ecs_users` u ON o.user_id = u.user_id LEFT JOIN `shop`.`ecs_affiliate_log` a ON o.order_id = a.order_id WHERE o.user_id > 0 AND (u.parent_id > 0 AND o.is_separate = 0 OR o.is_separate > 0);
# Time: 160303 12:12:44
# User@Host: root[root] @??[10.165.34.182]
# Query_time: 6.073441??Lock_time: 0.000152 Rows_sent: 15??Rows_examined: 24314767
SET timestamp=1456978364;
SELECT o.*, a.log_id, a.user_id as suid,??a.user_name as auser, a.money, a.point, a.separate_type,u.parent_id as up FROM `shop`.`ecs_order_info` o LEFT JOIN`shop`.`ecs_users` u ON o.user_id = u.user_id LEFT JOIN `shop`.`ecs_affiliate_log` a ON o.order_id = a.order_id WHERE o.user_id > 0 AND (u.parent_id > 0 AND o.is_separate = 0 OR o.is_separate > 0)??ORDER BY order_id DESC LIMIT 0,15;
通過慢日志發現其中有幾個表查詢耗時較長,下面就是把這個查詢慢的表建立索引
用到的軟件 NAvicat,對查詢慢的表進行設計,增加索引
根據 explain??的解釋,查看下??索引是否建立,一般都是 這樣調整 就行。
修改完后重啟mysql 服務,查詢時間從65s,縮短到 0.017407 秒
參考了大量的網絡資料,頭一次搞優化。優化完后很有成就感,算是一次新的挑戰
總結
以上是生活随笔為你收集整理的mysql开发java心得_关于mysql 一些优化心得的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lnmp中怎么运行ngin和mysql_
- 下一篇: postgre 没有主键自增ma_Pos