不太明顯的“表 ‘mytable’ 已滿”錯誤
mysqld.log 中的錯誤:
2020-02-02T01:17:32.133974Z 3069 [ERROR] /usr/sbin/mysqld: The table 'IS_DUT_IFID' is full
我發現的有關此錯誤的許多執行緒都沒有幫助我解決此問題。
這是我到目前為止檢查或嘗試過的內容:
innodb_data_file_path -自動擴展
innodb_temp_data_file_path -自動擴展
innodb_file_per_table - ON(並且有效)
/var/lib/mysql和*/tmp*磁碟空間 - 47GB 可用
innodb_buffer_pool_ * 增加
- 1 個 128 MB 的實例(預設)增加到4 個 256MB的實例,總共 1GB
據我所知,沒有使用過大的斑點,但這樣做是為了以防萬一,因為這是我能找到的唯一其他建議:
- innodb_log_file_size從 50MB(預設)增加到 128MB
- innodb_log_buffer_size從 16MB(預設)增加到 32MB
我確實注意到 IS_DUT_IFID.ibd 最近通過了 4GB 標記。該文件位於由 Red Hat 6.8 管理的 ext4 卷上。它是 32 位的,但超過 4GB 的文件似乎不會導致作業系統出現任何問題,並且根據以下內容不應達到任何作業系統限制:https ://access.redhat.com/articles/rhel-限制
伺服器有 8GB 記憶體,但我猜任何給定程序只有 4GB 可用,因為它是 32 位的。我的印像是 MySQL 可以一次智能地處理塊,並且只會載入它需要的內容,所以這應該不是問題。也許我錯了?
我唯一的想法是將作業系統升級到 64 位,這樣我就可以執行 64 位的 MySQL,但我更願意盡可能讓這台伺服器保持原樣。任何建議都非常感謝!
.
MySQL資訊:
mysql> show table status like 'IS_DUT_IFID'; +-------------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +-------------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+ | IS_DUT_IFID | InnoDB | 10 | Dynamic | 35362861 | 32 | 1160773632 | 0 | 2279604224 | 6291456 | NULL | 2020-01-30 15:11:10 | 2020-02-02 11:00:38 | NULL | latin1_swedish_ci | NULL | | | +-------------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+ 1 row in set (0.00 sec) mysql> show variables like '%innodb%'; +------------------------------------------+------------------------+ | Variable_name | Value | +------------------------------------------+------------------------+ | ignore_builtin_innodb | OFF | | innodb_adaptive_flushing | ON | | innodb_adaptive_flushing_lwm | 10 | | innodb_adaptive_hash_index | ON | | innodb_adaptive_hash_index_parts | 8 | | innodb_adaptive_max_sleep_delay | 150000 | | innodb_api_bk_commit_interval | 5 | | innodb_api_disable_rowlock | OFF | | innodb_api_enable_binlog | OFF | | innodb_api_enable_mdl | OFF | | innodb_api_trx_level | 0 | | innodb_autoextend_increment | 64 | | innodb_autoinc_lock_mode | 1 | | innodb_buffer_pool_chunk_size | 268435456 | | innodb_buffer_pool_dump_at_shutdown | ON | | innodb_buffer_pool_dump_now | OFF | | innodb_buffer_pool_dump_pct | 25 | | innodb_buffer_pool_filename | ib_buffer_pool | | innodb_buffer_pool_instances | 4 | | innodb_buffer_pool_load_abort | OFF | | innodb_buffer_pool_load_at_startup | ON | | innodb_buffer_pool_load_now | OFF | | innodb_buffer_pool_size | 1073741824 | | innodb_change_buffer_max_size | 25 | | innodb_change_buffering | all | | innodb_checksum_algorithm | crc32 | | innodb_checksums | ON | | innodb_cmp_per_index_enabled | OFF | | innodb_commit_concurrency | 0 | | innodb_compression_failure_threshold_pct | 5 | | innodb_compression_level | 6 | | innodb_compression_pad_pct_max | 50 | | innodb_concurrency_tickets | 5000 | | innodb_data_file_path | ibdata1:12M:autoextend | | innodb_data_home_dir | | | innodb_deadlock_detect | ON | | innodb_default_row_format | dynamic | | innodb_disable_sort_file_cache | OFF | | innodb_doublewrite | ON | | innodb_fast_shutdown | 1 | | innodb_file_format | Barracuda | | innodb_file_format_check | ON | | innodb_file_format_max | Barracuda | | innodb_file_per_table | ON | | innodb_fill_factor | 100 | | innodb_flush_log_at_timeout | 1 | | innodb_flush_log_at_trx_commit | 1 | | innodb_flush_method | | | innodb_flush_neighbors | 1 | | innodb_flush_sync | ON | | innodb_flushing_avg_loops | 30 | | innodb_force_load_corrupted | OFF | | innodb_force_recovery | 0 | | innodb_ft_aux_table | | | innodb_ft_cache_size | 8000000 | | innodb_ft_enable_diag_print | OFF | | innodb_ft_enable_stopword | ON | | innodb_ft_max_token_size | 84 | | innodb_ft_min_token_size | 3 | | innodb_ft_num_word_optimize | 2000 | | innodb_ft_result_cache_limit | 2000000000 | | innodb_ft_server_stopword_table | | | innodb_ft_sort_pll_degree | 2 | | innodb_ft_total_cache_size | 640000000 | | innodb_ft_user_stopword_table | | | innodb_io_capacity | 200 | | innodb_io_capacity_max | 2000 | | innodb_large_prefix | ON | | innodb_lock_wait_timeout | 50 | | innodb_locks_unsafe_for_binlog | OFF | | innodb_log_buffer_size | 33554432 | | innodb_log_checksums | ON | | innodb_log_compressed_pages | ON | | innodb_log_file_size | 134217728 | | innodb_log_files_in_group | 2 | | innodb_log_group_home_dir | ./ | | innodb_log_write_ahead_size | 8192 | | innodb_lru_scan_depth | 1024 | | innodb_max_dirty_pages_pct | 75.000000 | | innodb_max_dirty_pages_pct_lwm | 0.000000 | | innodb_max_purge_lag | 0 | | innodb_max_purge_lag_delay | 0 | | innodb_max_undo_log_size | 1073741824 | | innodb_monitor_disable | | | innodb_monitor_enable | | | innodb_monitor_reset | | | innodb_monitor_reset_all | | | innodb_numa_interleave | OFF | | innodb_old_blocks_pct | 37 | | innodb_old_blocks_time | 1000 | | innodb_online_alter_log_max_size | 134217728 | | innodb_open_files | 2000 | | innodb_optimize_fulltext_only | OFF | | innodb_page_cleaners | 4 | | innodb_page_size | 16384 | | innodb_print_all_deadlocks | OFF | | innodb_purge_batch_size | 300 | | innodb_purge_rseg_truncate_frequency | 128 | | innodb_purge_threads | 4 | | innodb_random_read_ahead | OFF | | innodb_read_ahead_threshold | 56 | | innodb_read_io_threads | 4 | | innodb_read_only | OFF | | innodb_replication_delay | 0 | | innodb_rollback_on_timeout | OFF | | innodb_rollback_segments | 128 | | innodb_sort_buffer_size | 1048576 | | innodb_spin_wait_delay | 6 | | innodb_stats_auto_recalc | ON | | innodb_stats_include_delete_marked | OFF | | innodb_stats_method | nulls_equal | | innodb_stats_on_metadata | OFF | | innodb_stats_persistent | ON | | innodb_stats_persistent_sample_pages | 20 | | innodb_stats_sample_pages | 8 | | innodb_stats_transient_sample_pages | 8 | | innodb_status_output | OFF | | innodb_status_output_locks | OFF | | innodb_strict_mode | ON | | innodb_support_xa | ON | | innodb_sync_array_size | 1 | | innodb_sync_spin_loops | 30 | | innodb_table_locks | ON | | innodb_temp_data_file_path | ibtmp1:12M:autoextend | | innodb_thread_concurrency | 0 | | innodb_thread_sleep_delay | 10000 | | innodb_tmpdir | | | innodb_undo_directory | ./ | | innodb_undo_log_truncate | OFF | | innodb_undo_logs | 128 | | innodb_undo_tablespaces | 0 | | innodb_use_native_aio | ON | | innodb_version | 5.7.29 | | innodb_write_io_threads | 4 | +------------------------------------------+------------------------+ 134 rows in set (0.01 sec) mysql> show variables like '%tmp%'; +----------------------------------+----------+ | Variable_name | Value | +----------------------------------+----------+ | default_tmp_storage_engine | InnoDB | | innodb_tmpdir | | | internal_tmp_disk_storage_engine | InnoDB | | max_tmp_tables | 32 | | slave_load_tmpdir | /tmp | | tmp_table_size | 16777216 | | tmpdir | /tmp | +----------------------------------+----------+ 7 rows in set (0.00 sec) mysql> show variables like '%datadir%'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | datadir | /var/lib/mysql/ | +---------------+-----------------+ 1 row in set (0.00 sec) mysql> select version(); +-----------+ | version() | +-----------+ | 5.7.29 | +-----------+ 1 row in set (0.00 sec)
附加資訊:
源自 Perl 腳本的 INSERT 錯誤:
The table 'IS_DUT_IFID' is full [for Statement "INSERT INTO IS_DUT_IFID ( ddv_id, dut_ifid_id, is_id) VALUES ( '84600', 3172, 1594897 )"]
這聽起來像是答案:將作業系統升級到 64 位以執行 64 位版本的 MySQL。
有趣的是,在 Windows 32 中 InnoDB 表的大小是有限制的
注意關於“InnoDB 限制”的 MySQL 文件的 Bulletpoint 10
在 Windows 32 位系統上,表空間文件不能超過 4GB(錯誤 #80149)。
請注意該錯誤報告的摘錄(於 2020 年 1 月 26 日上午 8 點 10 分送出)
當臨時表的大小達到 4GB 時,測試案例會失敗,如下所示:
mysql> 插入 t select * from t; 查詢正常,98304 行受影響(6 分 54.49 秒)記錄:98304 重複:0 警告:0
mysql> 插入 t select * from t; 錯誤 1114 (HY000): 表 ‘c:\tmp#sql2cc04_17_10’ 已滿
o) 適用於 Linux 64 位和 Windows 64 位工作正常。o) tmpdir 和 datadir 有足夠的可用空間。
看起來你的情況也是如此。
也許同樣的限制也存在於 32 位版本的 MySQL 中。