小結:
1、避免並行大大事務對磁盤、內存的消耗;
MySQL數據文件導致實例空間滿的解決辦法_空間/內存_常見問題_雲數據庫 RDS 版-阿里雲 https://help.aliyun.com/knowledge_detail/101642.html
MySQL實例可能會由於查詢語句的排序、分組、關聯表產生的臨時表文件,或者大事務未提交前產生的binlog cache文件,導致實例空間滿,為避免數據丟失,RDS會對實例進行自動鎖定,磁盤鎖定之后,將無法進行寫入操作。
查看數據庫的文件大小,分析其中可以刪除的歷史數據文件或無用數據文件。
SELECT file_name, concat(TOTAL_EXTENTS,'M') as 'FIle_size' FROM INFORMATION_SCHEMA.FILES order by TOTAL_EXTENTS
MySQL Binlog日志的生成和清理規則_數據備份/恢復_常見問題_雲數據庫 RDS 版-阿里雲 https://help.aliyun.com/knowledge_detail/41815.html
Binlog日志的生成規則
MySQL實例空間內生成binlog日志的規則如下:
-
通常情況下,當前binlog大小超過500MB或超過6小時會切換到下一序號文件繼續寫入,即寫滿500MB或超過6小時就會生成新的binlog日志文件。新的binlog文件繼續寫入,老的binlog文件並不會立刻上傳,會異步上傳。
-
有些情況下,binlog日志不滿500MB就不再寫入,比如由於命令的執行、系統重啟等原因。
-
有些情況下,會出現binlog文件尺寸超過500MB的情況,比如當時在執行大事務,不斷寫入binlog導致當前binlog文件尺寸超過500MB。
Binlog日志的保存及清理規則
MySQL實例的空間內默認清理binlog日志的規則如下:
-
實例空間內默認會保存最近18個小時內的binlog文件。
-
當實例使用空間小於購買空間的80%時,系統會保存購買空間的30%的binlog(即使該binlog文件已經上傳到OSS內)。
-
當實例使用空間超過購買空間的80%時,binlog會在上傳到OSS后,發起刪除本地數據的請求,但本地刪除會有任務調度,有一定延遲。
-
Binlog文件上傳到OSS后,才可以在RDS控制台上顯示。查看步驟如下:
-
登錄RDS管理控制台。
-
選擇要管理的實例所在的地域。
-
單擊目標實例右的ID,進入基本信息頁面。
-
在左側導航欄中,選擇備份恢復,進入備份恢復頁面。
-
選擇日志備份標簽頁,即可查看已上傳的binlog日志。
-
-
Binlog日志在后台生成,可在RDS控制台中下載,大概需要30~60分鍾,如果binlog文件較大,所需時間更長。
后續維護
對於經常有delete
操作的表,容易產生數據空洞,可以在業務低峰期使用optimize table <數據庫名>.<表名>
回收空間。
后續維護
- 針對查詢產生的臨時文件,應該優化SQL語句,避免頻繁使用 order by、group by 操作,可以適當調大tmp_table_size和max_heap_table_size,但是為了減少磁盤使用而調高 tmp_table_size 和 max_heap_table_size 並不明智,因為內存資源遠比磁盤資源寶貴;可以通過
explain
+SQL語句查看是否使用內部臨時表,在 Extra 字段中有 Using temporary 字樣的代表會使用內部臨時表。示例如下: - 針對binlog cache,應該少執行大事務,尤其應該減少在多個連接同時執行大事務,如果大事務比較多,可以適當調大binlog_cache_size,但是同樣不應該為了節省磁盤調整這個參數,使用短連接執行大事務可以有效降低臨時空間開銷。