Mysql 效能調優 二 2
Mysql 效能調優 二 2
oracle 資料庫遷移到 mysql資料庫
很複雜的sql語句必須重新編寫成相對簡單的sql
效能會下降
原因:
nest loopjoin
hash join
sort mergejoin
hash 的效能原因高於巢狀sql的for的排序
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
鎖:
排它鎖:當檢視修改資料時,事務會為所以來的資料資源請求排它鎖,一旦授予,事務將一直持有排它鎖,直至事務完成。
這種鎖模式之所以稱為排它鎖,是因為相對於相同的資料資源,如果有其他事務已經獲得了該資源的任何型別的鎖,就不能再獲得該資源的排它鎖;
如果有其他事務已經獲得該資源的排它鎖,就不能再獲得該資源的任何型別的鎖。
共享鎖:當檢視讀取資料時,事務預設會為所依賴的資料資源請求共享鎖,讀操作一完成,就立即釋放資源上的共享鎖。
這種鎖模式之所以成為共享鎖,是因為多個事務可以同事持有同一資料資源上的共享鎖。
事務之間鎖的相互制約關係:如果資料正在由一個事務進行修改,其他事務就既不能修改該資料,也不能讀取(至少預設不能)該資料,直到第一個資料完成。
吐過資料正在由另一個事務讀取,其他事務就不能修改該資料(至少預設不能)。
1.共享鎖只用於表級,排他鎖用於行級。
2.加了共享鎖的物件,可以繼續加共享鎖,不能再加排他鎖。加了排他鎖後,不能再加任何鎖。
3.比如一個DML操作,就要對受影響的行加排他鎖,這樣就不允許再加別的鎖,也就是說別的會話不能修改這些行。
同時為了避免在做這個DML操作的時候,有別的會話執行DDL,修改表的定義,所以要在表上加共享鎖,這樣就阻止了DDL的操作。
4.當執行DDL操作時,就需要在全表上加排他鎖。
表鎖
行鎖
系統引數:
lock_wait_timeout
max_write_lock_count
innodb_table_locks
狀態引數:
Table_locks_waited
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[server]
[mysqld]
[client]
[mysql]
[mysqladmin]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
慢查詢
系統引數:
slow_query_log
slow_query_log_file
query_cache_type
query_cache_limit
query_cache_size
long_query_time
狀態引數:
Last_query_cost
開啟慢查詢:
1.
直接去my.conf中檢視。
my.conf中的配置(放在[mysqld]下的下方加入)
[mysqld]
slow_query_log_file = /var/lib/mysql/test1-slow.log
long_query_time = 1 #單位是秒
log-queries-not-using-indexes
使用sql語句來修改:不能按照my.conf中的項來修改的。
修改透過
show VARIABLES like "%slow%"
語句列出來的變數,執行如下sql:
set global slow_query_log = ON;
set global long_query_time=0.1; #設定大於0.1s的sql語句記錄下來
2. 慢查詢函式:
mysql> select sleep(12);
+-----------+
| sleep(12) |
+-----------+
| 0 |
+-----------+
1 row in set (12.00 sec)
mysql>
3. 檢視日誌
[root@test1 ~]# cat /var/lib/mysql/test1-slow.log
/usr/sbin/mysqld, Version: 5.6.22-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 141217 13:13:58
# User@Host: root[root] @ localhost [] Id: 2
# Query_time: 12.000427 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1418793238;
select sleep(12);
[root@test1 ~]#
php編寫的慢查詢分析指令碼:
oracle 資料庫遷移到 mysql資料庫
很複雜的sql語句必須重新編寫成相對簡單的sql
效能會下降
原因:
nest loopjoin
hash join
sort mergejoin
hash 的效能原因高於巢狀sql的for的排序
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
鎖:
排它鎖:當檢視修改資料時,事務會為所以來的資料資源請求排它鎖,一旦授予,事務將一直持有排它鎖,直至事務完成。
這種鎖模式之所以稱為排它鎖,是因為相對於相同的資料資源,如果有其他事務已經獲得了該資源的任何型別的鎖,就不能再獲得該資源的排它鎖;
如果有其他事務已經獲得該資源的排它鎖,就不能再獲得該資源的任何型別的鎖。
共享鎖:當檢視讀取資料時,事務預設會為所依賴的資料資源請求共享鎖,讀操作一完成,就立即釋放資源上的共享鎖。
這種鎖模式之所以成為共享鎖,是因為多個事務可以同事持有同一資料資源上的共享鎖。
事務之間鎖的相互制約關係:如果資料正在由一個事務進行修改,其他事務就既不能修改該資料,也不能讀取(至少預設不能)該資料,直到第一個資料完成。
吐過資料正在由另一個事務讀取,其他事務就不能修改該資料(至少預設不能)。
1.共享鎖只用於表級,排他鎖用於行級。
2.加了共享鎖的物件,可以繼續加共享鎖,不能再加排他鎖。加了排他鎖後,不能再加任何鎖。
3.比如一個DML操作,就要對受影響的行加排他鎖,這樣就不允許再加別的鎖,也就是說別的會話不能修改這些行。
同時為了避免在做這個DML操作的時候,有別的會話執行DDL,修改表的定義,所以要在表上加共享鎖,這樣就阻止了DDL的操作。
4.當執行DDL操作時,就需要在全表上加排他鎖。
表鎖
行鎖
系統引數:
lock_wait_timeout
max_write_lock_count
innodb_table_locks
狀態引數:
Table_locks_waited
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[server]
[mysqld]
[client]
[mysql]
[mysqladmin]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
慢查詢
系統引數:
slow_query_log
slow_query_log_file
query_cache_type
query_cache_limit
query_cache_size
long_query_time
狀態引數:
Last_query_cost
開啟慢查詢:
1.
直接去my.conf中檢視。
my.conf中的配置(放在[mysqld]下的下方加入)
[mysqld]
slow_query_log_file = /var/lib/mysql/test1-slow.log
long_query_time = 1 #單位是秒
log-queries-not-using-indexes
使用sql語句來修改:不能按照my.conf中的項來修改的。
修改透過
show VARIABLES like "%slow%"
語句列出來的變數,執行如下sql:
set global slow_query_log = ON;
set global long_query_time=0.1; #設定大於0.1s的sql語句記錄下來
2. 慢查詢函式:
mysql> select sleep(12);
+-----------+
| sleep(12) |
+-----------+
| 0 |
+-----------+
1 row in set (12.00 sec)
mysql>
3. 檢視日誌
[root@test1 ~]# cat /var/lib/mysql/test1-slow.log
/usr/sbin/mysqld, Version: 5.6.22-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 141217 13:13:58
# User@Host: root[root] @ localhost [] Id: 2
# Query_time: 12.000427 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1418793238;
select sleep(12);
[root@test1 ~]#
php編寫的慢查詢分析指令碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29500582/viewspace-1379440/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 2. 效能調優概述
- MySQL入門--效能調優概述MySql
- Spark學習——效能調優(二)Spark
- MySQL調優效能監控之show profileMySql
- MySQL調優效能監控之performance schemaMySqlORM
- 技術更新!10個MySQL效能調優技巧MySql
- Linux工具效能調優系列二:buffer和cacheLinux
- Spark 效能調優--資源調優Spark
- 【效能調優】效能測試、分析與調優基礎
- MySQL調優MySql
- MySQL管理之道,效能調優,高可用與監控(第二版)pdf下載MySql
- adnroid效能調優
- ElasticSearch效能調優Elasticsearch
- MySQL調優篇 | 索引知識解讀(2)MySql索引
- 效能調優-Mysql索引資料結構詳解與索引優化MySql索引資料結構優化
- 效能調優學習之硬體調優
- Linux之效能調優Linux
- 效能監控調優
- .Net效能調優-MemoryPool
- .Net效能調優-ArrayPool
- linux調優效能命令Linux
- 效能調優實戰
- mysql效能優化MySql優化
- MySQL——效能優化MySql優化
- (2)Linux效能調優之Linux記憶體體系Linux記憶體
- 《軟體效能測試分析與調優實踐之路》(第2版) 讀書筆記(二)總體介紹(下)-真正從效能分析與調優來看效能測試筆記
- 【學習效能分析--第二版】如何做好效能測試分析診斷調優-暨《軟體效能測試、分析與調優實踐之路》(第2版)推薦
- TiDB 效能分析&效能調優&優化實踐大全TiDB優化
- MySQL調優篇 | SQL調優實戰(5)MySql
- Nginx安全優化與效能調優Nginx優化
- MySQL調優之索引優化MySql索引優化
- java效能調優記錄Java
- Kafka 線上效能調優Kafka
- android效能調優詳解Android
- 效能調優命令之jstackJS
- 淺談Nginx效能調優Nginx
- solr研磨之效能調優Solr
- mysql 引數調優MySql
- MySQL 效能優化方案MySql優化