MySQL參數tmp_table_size和max_heap_table_size對比分析


前言

如果 SQL 在執行過程中讀到的數據無法直接得到結果,那么就需要額外的內存來保存中間結果,得出最終結果,這個額外的內存就是內部臨時表,哪些操作會產生臨時表呢,下面這個截圖從官網獲得

與臨時表相關的兩個參數

tmp_table_size

  • 內存中臨時表的最大大小。這個變量不適用於用戶創建的MEMORY引擎表;
  • 實際限制是tmp_table_size和max_heap_table_size的最小值;
  • 當內存中的臨時表超過限制時,MysQL會自動將其轉換為磁盤上的臨時表。

max_heap_table_size

  • 這個變量設置用戶創建的MEMORY引擎表允許增長的最大大小;
  • 該變量的值用於計算內存表的MAX_ROWS值;
  • 設置這個變量對一個已有的MEMORY表沒有影響;
  • 這個變量與tmp_table_size一起使用,以限制內部內存表的大小。

總結(我的環境MySQL 5.7.31)

1、tmp_table_size 內存中臨時表的最大大小,這個變量不適用於用戶創建的MEMORY引擎表。
2、max_heap_table_size這個參數是用來限制MEMORY引擎表的,這個變量設置用戶創建的MEMORY表允許增長的最大大小,該變量的值用於計算內存表的MAX_ROWS值。
3、當在內存或磁盤上創建內部臨時表時,服務器會增加Created_tmp_tables值。當在磁盤上創建內部臨時表時,服務器會增加Created_tmp_disk_tables值。如果在磁盤上創建了過多的內部臨時表,請考慮增加tmp_table_size和max_heap_table_size設置。
4、內存臨時表由MEMORY存儲引擎管理,所以建議max_heap_table_size設置一樣的,如果tmp表變得太大,就會在磁盤上創建默認的InnoDB表(5.7版本是這樣);
5、tmp_table_size&max_heap_table_size,內部臨時表是存在內存中的,使用 MEMORY 存儲引擎,如果大小超過了這兩者較小的值,則會轉化為磁盤臨時表;
6、internal_tmp_disk_storage_engine:如果內部臨時表轉化為磁盤臨時表,則這個參數指定了磁盤臨時表的存儲引擎,默認是 INNODB,還可以設置為 MYISAM;
7、innodb_temp_data_file_path:指定了臨時表空間的位置和大小,默認值為 ibtmp1:12M:autoextend ,即 datadir/ibtmp1,初始大小12M可以無限擴展,建議限制一個最大值防止把磁盤撐滿。

個人筆記


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM