Mysql

MySQL 轉儲的緩慢 MariaDB 負載

  • February 27, 2017

我有一個從 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 伺服器和1MariaDB 伺服器上設置為。我可以更新配置以匹配它。他們倆都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.

結論:與同時更改兩者相比,磁碟命中次數要多得多。

引用自:https://dba.stackexchange.com/questions/163396