AWS RDS Aurora MySQL 調整 slow_query_log 小記
因為同事提出要啟用 slow_query_log 功能, 所以寫了一篇小記紀錄一下
DB: Amazon Aurora MySQL 5.7-compatible ( 5.7.12 )
Aurora DB 的建立過程非常的簡單
- 選取 DB Engine / DB 名稱 / 管理者名稱 / 管理者密碼
- 其他按照預設值就可以建立 DB
- 預設沒有 Public Access 可以按照需求調整, 但是有趣的是, 縱使沒有選取 Public Access, AWS 還是會在 EC2 的 Security Group 內默默的幫你建立一個 Security Group 讓你日後方便連線
建立起來之後預設是兩個 instances, 一個是 Writer 另外一個是 Reader
在 AWS RDS 如果要變更相關設定, 是透過 Parameter groups 來進行
- DB cluster parameter group
- 針對整個 Cluster 來設定, 產生新的 Reader 的時候, 會套用相關設定
- DB parameter group
- 單一 instance 套用的設定
- 如果 RDS 發現 DB cluster parameter group 與 某一個 instance 的設定有衝突, 會在 Recommendations 內提醒
建立 Aurora 之後
- DB cluster parameter group 是套用預設的 default.aurora-mysql5.7
- 單一 instance 的 Parameter group 也是套用預設的 default.aurora-mysql5.
那要如何確認相關設定有啟用呢
- 沒有 Public access, 從該 Region 內的 EC2 來進行連線
- 有 Public access, 使用剛剛建立的 Security Group 或是建立 Security Group 使用 mysql client 指令連線
建立連線的方式可以參考官方網頁
- > mysql -h <endpoint> -P 3306 -u <mymasteruser> -p
- endpoint 可以觀察Connectivity & security 內的 Endpoint & port
- mymasteruser 就是管理者帳號
連線方式大概如下
> mysql -h test20190713-test-pg2.ccfftpkkx3dr.us-east-2.rds.amazonaws.com -P 3306 -u root -p
Enter password: 輸入DB密碼
查詢相關設定
> SHOW VARIABLES like '%slow_query_log%';
+---------------------+----------------------------------------------+
| Variable_name | Value |
+---------------------+----------------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /rdsdbdata/log/slowquery/mysql-slowquery.log |
+---------------------+----------------------------------------------+
2 rows in set (0.33 sec)
> SHOW VARIABLES like '%long_q%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.42 sec)
> SHOW VARIABLES like '%log_quer%';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |
+-------------------------------+-------+
1 row in set (0.26 sec)
接下來就是要建立 Parameter group 來套用設定, 此次會有幾個相關設定
- slow_query_log
- 是否啟用 slow_query_log , 也就是針對查詢的時間過長( slow ) 來紀錄 log
- long_query_time
- 定義 long_query_time , 查詢超過多少秒, 就列入紀錄, RDS 預設是 10 秒
- log_queries_not_using_indexes
- 是否啟用 log_queries_not_using_indexes, 也就是如果查詢沒有使用 index 也要紀錄
這次只要針對其中一個 instance 來設定, 所以我會使用 DB parameter group ( 單一 instance )方式, 後面也會把我整理的邏輯列出
建立新的 Parameter group
點選左方的 Parameter groups -- > Create parameter group
- 建立方式只要選取 group family 還有 Type ( cluster or not ), 輸入名稱還有敘述就可以建立
建立完成之後要來將剛剛想要修改的參數放進去
點選剛剛建立的 Parameter Group
在搜尋的欄位輸入關鍵字
勾選參數
點選 Edit parameters
下拉式選單 選取要使用的 value -- > Save changes
使用同樣的方式去設定
- long_query_time = 10
- log_queries_not_using_indexes =1
接下來要套用到 instance 上面
回到 Databases
點選要套用的 instance -- > Modify
在 Database options 內的 DB parameter group 選取剛剛建立的 parameter group
點選 Continue
選取要套用的時間點 -- > Modify DB Instances
不同的設定可能會關係到要不要重開機才能生效, 那要如何觀察呢?
可以在該 instance 的 configuration 內觀察
如果是要重開機才能生效, 會看到 pending-reboot 這樣的字眼
那就 使用 Actions -- > Reboot 來讓他生效吧
( 如果是 Production 環境, 請用架構的方式或是協調停機來避免事故 )
再次連線到 instance 來觀察
> mysql -h test20190713-test-pg2.ccfftpkkx3dr.us-east-2.rds.amazonaws.com -P 3306 -u root -p
Enter password: 輸入DB密碼
查詢相關設定
> SHOW VARIABLES like '%slow_query_log%';
+---------------------+----------------------------------------------+
| Variable_name | Value |
+---------------------+----------------------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /rdsdbdata/log/slowquery/mysql-slowquery.log |
+---------------------+----------------------------------------------+
2 rows in set (0.33 sec)
> SHOW VARIABLES like '%long_q%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.42 sec)
> SHOW VARIABLES like '%log_quer%';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON |
+-------------------------------+-------+
1 row in set (0.26 sec)
也可以在該 instance 的 Log & events 觀察到有這個 log 產生
那可以如何測試與觀察呢?
剛剛的 mysql-slowquery.log 可以點選 View 或是 Watch ( 即時觀察 )
可以在 mysql client 連線使用
> select sleep(15);
+-----------+
| sleep(15) |
+-----------+
| 0 |
+-----------+
1 row in set (15.42 sec)
應該會觀察到
# Query_time: 15.000312 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1562993052;
select sleep(15);
其他小記
設定 DB cluster parameter group 設定 slow_query_log 為 1 ( 啟用 )
建立 新 Reader
- 發現有套用 slow_query_log
- 沒有影響現有的 instance
Log exports 是針對整個 cluster 設定不是單一 instance
先記下來
~ enjoy it
Reference:
沒有留言:
張貼留言