星期六, 7月 13, 2019

AWS RDS Aurora MySQL 調整 slow_query_log 小記

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 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:

沒有留言: