mysql 記憶體表The table 'pvlogs' is full問題處理
今天收到報錯:[ERROR] mysqld: The table 'pvlogs' is full,資料無法寫入,影響業務,看到這個錯,我首先想到是不是空間滿了,檢視之後發現是正常的,透過查詢和詢問同事才知道,原來這個記憶體引擎的表。
首先理解下記憶體引擎的概念:
MEMORY儲存引擎:
(1)memory儲存引擎相比前面的一些儲存引擎,有點不一樣,其使用儲存在記憶體中的資料來建立表,而且所有的資料也都儲存在記憶體中。
(2)每個基於memory儲存引擎的表實際對應一個磁碟檔案,該檔案的檔名和表名是相同的,型別為.frm。該檔案只儲存表的結構,而其資料檔案,都是儲存在記憶體中,這樣有利於對資料的快速處理,提高整個表的處理能力。
(3)memory儲存引擎預設使用雜湊(HASH)索引,其速度比使用B-+Tree型要快,如果讀者希望使用B樹型,則在建立的時候可以引用。
(4)memory儲存引擎檔案資料都儲存在記憶體中,如果mysqld程式發生異常,重啟或關閉機器這些資料都會消失。所以memory儲存引擎中的表的生命週期很短,一般只使用一次。
解決辦法:
方法一:
檢視記憶體表大小相關引數
MariaDB [log]> show VARIABLES like '%max_heap_table_size%';
+---------------------+-----------+
| Variable_name | Value |
+---------------------+-----------+
| max_heap_table_size | 671088640 |
+---------------------+-----------+
1 row in set (0.00 sec)
檢視臨時表大小控制引數
MariaDB [log]> show VARIABLES like '%tmp_table_size%';
+----------------+----------+
| Variable_name | Value |
+----------------+----------+
| tmp_table_size | 67108864 |
+----------------+----------+
1 row in set (0.01 sec)
1). 設定新的引數,這樣設定的引數重啟就失效了,
mysql> set global max_heap_table_size=1048576000
mysql> set global tmp_table_size=1048576000
2)之後在mysql配置檔案my.cnf裡面新增下面兩行,使得永久生效。
tmp_table_size = 671088640
max_heap_table_size = 671088640
3)然後客戶端重新連線資料庫就可以了,如果再不可以的話,那就重新建立相關的記憶體表。
關於max_heap_table_size和tmp_table_size的解釋:
tmp_table_size :它規定了內部記憶體臨時表的最大值,每個執行緒都要分配。(實際起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果記憶體臨時表超出了限制,MySQL就會自動地把它轉化為基於磁碟的MyISAM表,儲存在指定的tmpdir目錄下,預設:
mysql> show variables like "tmpdir";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| tmpdir | /tmp/ |
+---------------+-------+
max_heap_table_size:這個變數定義了使用者可以建立的記憶體表(memory table)的大小.這個值用來計算記憶體表的最大行數值。這個變數支援動態改變,即set global max_heap_table_size=#
,但是對於已經存在的記憶體表就沒有什麼用了,除非這個表被重新建立(create table)或者修改(alter table)或者truncate table。服務重啟也會設定已經存在的記憶體表為全域性max_heap_table_size的值。
這個變數和tmp_table_size一起限制了內部記憶體表的大小。
方法二:
執行ALTER TABLE tbl_name MAX_ROWS=1000000000;
總結:關於mysql的memory儲存引擎的表報錯:The table 'pvlogs' is full的問題解決,直接ALTER TABLE tbl_name MAX_ROWS=1000000000立馬生效,然後你再修改max_heap_table_size和tmp_table_size這兩個引數,並把這個引數寫進配置檔案,這樣重啟mysql之後依舊生效,一定注意設定這兩個引數之後,對已經存在的記憶體表是不生效的,需要重新建立(create table)或者修改(alter table)或者truncate table
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2128189/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記憶體分配問題處理記憶體
- mysql最大表記憶體MySql記憶體
- 告別記憶體OOM,解決MySQL記憶體增長問題記憶體OOMMySql
- 【問題處理】MySQL忘記root密碼的處理辦法MySql密碼
- Java 18 如何改進處理大型物件回收的記憶體碎片問題? -Java物件記憶體
- JavaScript 工作原理之三-記憶體管理及如何處理 4 類常見的記憶體洩漏問題(譯)JavaScript記憶體
- MySQL:亂碼問題處理流程MySql
- Linux記憶體不足的處理方法Linux記憶體
- MySQL 8.0.25 Bug 報"MY-013132 The table ...is full"MySql
- SQLServer記憶體問題分析SQLServer記憶體
- 探究 iOS 記憶體問題iOS記憶體
- table表頭固定問題
- MySQL-37:記憶體臨時表MySql記憶體
- Linux核心筆記005 - 越界訪問記憶體,Linux核心處理過程Linux筆記記憶體
- mysql中CPU或記憶體利用率過高問題MySql記憶體
- ThreadLocal記憶體洩漏問題thread記憶體
- 排查Java的記憶體問題Java記憶體
- laravel 解決 mysql only_full_group_by 問題LaravelMySql
- X86環境大記憶體下資料庫啟動問題分析與處理記憶體資料庫
- 造成記憶體洩漏的異常處理記憶體
- 【譯】JavaScript的記憶體管理和 4 種處理記憶體洩漏的方法JavaScript記憶體
- MySQL的表碎片處理MySql
- JVM堆外記憶體問題排查JVM記憶體
- Java記憶體模型常見問題Java記憶體模型
- redisson記憶體洩漏問題排查Redis記憶體
- MySQL記憶體管理MySql記憶體
- MySQL問題處理——1040錯誤Too many connectionsMySql
- delphi記憶體表記憶體
- 記憶體表(FDMEMTABLE)記憶體
- 瀏覽器performance工具介紹及記憶體問題表現與監控記憶體的幾種方式瀏覽器ORM記憶體
- MySql資料庫ibtmp1檔案增長問題處理記錄MySql資料庫
- 記錄一次現網MySQL記憶體增長超限問題定位過程MySql記憶體
- vector clear() 方法 記憶體釋放問題記憶體
- Windbg分析高記憶體佔用問題記憶體
- iOS 問題整理07----記憶體管理iOS記憶體
- 記憶體和棧溢位問題定位記憶體
- 小程式白屏問題和記憶體研究記憶體
- 解決git記憶體洩露問題Git記憶體洩露
- Java記憶體問題 及 LeakCanary 原理分析Java記憶體