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從庫 記憶體表The table 'pvlogs' is full問題處理MySql記憶體
- 記憶體分配問題處理記憶體
- Linux記憶體異常問題處理Linux記憶體
- mysql最大表記憶體MySql記憶體
- PL/SQL表(oracle記憶體表)---table()函式用法SQLOracle記憶體函式
- iOS小記--使用結構體處理資料表的問題iOS結構體
- 【問題處理】MySQL忘記root密碼的處理辦法MySql密碼
- mysql臨時表和記憶體表MySql記憶體
- Java 18 如何改進處理大型物件回收的記憶體碎片問題? -Java物件記憶體
- mysql的處理能力問題MySql
- mysql問題處理兩則MySql
- mysql 問題處理二則MySql
- JavaScript 工作原理之三-記憶體管理及如何處理 4 類常見的記憶體洩漏問題(譯)JavaScript記憶體
- mysql cluster ndb 記憶體表和磁碟表MySql記憶體
- 【WebLogic故障處理】一次嚴重的WebLogic記憶體洩漏問題處理過程Web記憶體
- 關於Oracle full outer join 的bug問題分析及處理Oracle
- 如何處理 JavaScript 記憶體洩露JavaScript記憶體洩露
- SQLServer記憶體問題分析SQLServer記憶體
- 探究 iOS 記憶體問題iOS記憶體
- 共享記憶體分段問題記憶體
- 記憶體溢位問題記憶體溢位
- RMAN備份時候記憶體區域的使用及split block處理問題記憶體BloC
- 資料庫伺服器記憶體資源消耗100%問題處理案例資料庫伺服器記憶體
- MySQL:亂碼問題處理流程MySql
- mysql的處理能力問題(2)MySql
- MySQL OOM問題處理一則MySqlOOM
- MySQL-37:記憶體臨時表MySql記憶體
- Linux記憶體不足的處理方法Linux記憶體
- sysaux 表空間不足問題處理UX
- 【轉載】MySQL之臨時表和記憶體表MySql記憶體
- mysql常用語句及問題處理MySql
- 排查Java的記憶體問題Java記憶體
- 記憶體溢位的問題記憶體溢位
- aix 共享記憶體段問題AI記憶體
- mysql複製和記憶體引擎的表MySql記憶體
- mysql中CPU或記憶體利用率過高問題MySql記憶體
- DELETE TABLE資料後,查詢變慢,問題處理delete
- X86環境大記憶體下資料庫啟動問題分析與處理記憶體資料庫