MySQL 轉儲的緩慢 MariaDB 負載
我有一個從 MySQL 5.5.53 數據庫生成的 MySQL 轉儲文件。我將它載入到 MariaDB 10.0.29 數據庫中。它比我將它載入到 MySQL 時慢得多(大約四倍)。我所有的表都是 InnoDB。我發現了一些建議,比如在載入過程中禁用唯一檢查和外鍵檢查,但是轉儲文件已經有了這些:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
我怎樣才能加快速度?
附加資訊
mysqldump
選項:這些--routines --single-transaction --quick --skip-extended-insert
不能改變。我知道該
skip-extended-insert
選項每條記錄插入一次,這會減慢恢復速度,但出於其他原因需要該選項。它也是同一個文件,需要四分之一的時間才能載入到我的 MySQL 數據庫中。
INNODB_FLUSH_LOG_AT_TRX_COMMIT``2
在 MySQL 伺服器和1
MariaDB 伺服器上設置為。我可以更新配置以匹配它。他們倆都SYNC_BINLOG
設置為0
。我還沒有對 MariaDB 的庫存配置進行任何更改。配置比較
我使用 將配置轉儲到文件中
mysql -uroot -p -A -e"SHOW GLOBAL VARIABLES;" > file-name.txt
,然後用於pt-config-diff
比較它們。我刪除了包含目錄和伺服器名稱的行。Variable MySQL Server MariaDB Server ========================= ================================ ================================ back_log 50 150 character_set_client latin1 utf8mb4 character_set_connection latin1 utf8mb4 character_set_database latin1 utf8mb4 character_set_results latin1 utf8mb4 character_set_server latin1 utf8mb4 collation_connection latin1_swedish_ci utf8mb4_general_ci collation_database latin1_swedish_ci utf8mb4_general_ci collation_server latin1_swedish_ci utf8mb4_general_ci innodb_additional_mem_... 20971520 8388608 innodb_autoextend_incr... 8 64 innodb_buffer_pool_ins... 1 14 innodb_buffer_pool_size 15032385536 21474836480 innodb_concurrency_tic... 500 5000 innodb_data_file_path ibdata1:10M:autoextend ibdata1:12M:autoextend innodb_log_file_size 262144000 5368709120 innodb_max_dirty_pages... 75 75.000000 innodb_old_blocks_time 0 1000 innodb_open_files 300 512 innodb_purge_batch_size 20 300 innodb_purge_threads 0 1 innodb_stats_on_metadata ON OFF innodb_use_native_aio OFF ON innodb_version 5.5.53 5.6.34-79.1 join_buffer_size 262144 131072 key_buffer_size 268435456 8589934592 max_connect_errors 10 100 max_heap_table_size 1610612736 67108864 max_relay_log_size 0 104857600 max_seeks_for_key 18446744073709551615 4294967295 max_write_lock_count 18446744073709551615 4294967295 myisam_sort_buffer_size 8388608 134216704 open_files_limit 3750 3755 query_cache_limit 8388608 268435456 query_cache_min_res_unit 4096 2048 query_cache_size 268435456 1073741824 read_buffer_size 4194304 2097152 table_open_cache 1000 512 thread_cache_size 16 128 tmp_table_size 1610612736 67108864 tmpdir /var/lib/mysql/tmp /tmp version 5.5.53-0ubuntu0.12.04.1 10.0.29-MariaDB-0ubuntu0.16.04.1 version_comment (Ubuntu) Ubuntu 16.04
更多資訊
- 沒有 MyISAM 表。
- MySQL 伺服器有 24G 的 RAM。MariaDB 伺服器有 32G 的 RAM。
key_buffer_size
設置為 RAM 的 25%,這是我在某處讀到的建議- 16G 是以前的伺服器(MySQL)設置。新伺服器(MariaDB)設置為 64M,遠低於 RAM 的 1%。
- 伺服器都是 64 位 Ubuntu,12.0.4 用於 MySQL 和 16.0.5 用於 MariaDB,並且數據庫是使用 安裝的
apt
,所以我很確定它們也是 64 位的。
降低
query_cache_size
到只有大約50M。你的尺寸太大了。 每次寫入表都會清除該表的所有QC 條目。QC 越大,所需的時間越長。(我在評論中添加了一些其他註釋;它們都不可能導致有問題的問題,只是其他問題。)
更多(在 OP 更新後)
key_buffer
僅用於 MyISAM 索引。由於您沒有 MyISAM 表(系統表除外),因此 8GB 過多;降低key_buffer_size
到 20M。
innodb_buffer_pool_size
,對於 32GB 的 RAM,20G 就可以了。
--extended-insert
執行速度可能是不使用它的 10 倍。你有理由關掉它嗎?遲緩的原因可能是與的組合。解釋:
innodb_flush_log_at_trx_commit=1``--skip-extended-insert
- =1 會在涉及 InnoDB 表的每個寫入語句之後導致額外的 fsync(磁碟命中)。
- –skip 使每一行成為單獨的
INSERT
.結論:與同時更改兩者相比,磁碟命中次數要多得多。