MariaDB / Columnstore 引擎内存阻塞

MariaDB / Columnstore engine Memory getting chocked

我们已经安装了 mariadb 和 columnstore 引擎,从过去几周开始,我们面临内存阻塞问题,内存阻塞和我们所有的 DML/DDL 操作都卡住了,在重新启动服务后它得到修复。

below are the stats :

              total        used        free      shared  buff/cache   available
Mem:             15           2           7           0           5          12
Swap:             4           0           4


[mysqld]
port = 3306
socket          = /opt/evolv/mariadb/columnstore/mysql/lib/mysql/mysql.sock
datadir         = /opt/evolv/mariadb/columnstore/mysql/db
skip-external-locking
key_buffer_size = 512M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 64M
read_buffer_size = 64M
read_rnd_buffer_size = 512M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 0
# Try number of CPU's*2 for thread_concurrency
#thread_concurrency = 8
thread_stack = 512K
lower_case_table_names=1
group_concat_max_len=512
infinidb_use_import_for_batchinsert=1
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 8192M
#innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 100M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

这里分析一下VARIABLES和(可疑的)GLOBAL STATUS;没有什么令人兴奋的:

观察:

  • 版本:10.1.26-MariaDB
  • 15 GB 内存
  • 正常运行时间=03:04:25;请在几个小时后重新运行 SHOW GLOBAL STATUS。
  • 您确定这是 SHOW GLOBAL STATUS 吗?
  • 您不在 Windows 上 运行。
  • 运行 64 位版本
  • 您似乎 运行 完全(或大部分)InnoDB。

更重要的问题:

正常运行时间 = 03:04:25;请在数小时后重新运行 SHOW GLOBAL STATUS。

您确定这是 SHOW GLOBAL STATUS 吗?

key_buffer_size 过大 (3G)。如果你不需要任何 MyISAM,请将其设置为 50M。

检查 infinidb_um_mem_limit 看看它是否适合您的应用程序。

建议将 innodb_buffer_pool_size 降低到 2G,直到找到 "choking"。

细节和其他观察结果: ( (key_buffer_size - 1.2 * Key_blocks_used * 1024) / _ram ) = (3072M - 1.2 * 0 * 1024) / 15360M = 20.0% -- key_buffer 中浪费的 RAM 百分比。 -- 减小 key_buffer_size.

( Key_blocks_used * 1024 / key_buffer_size ) = 0 * 1024 / 3072M = 0 -- 已使用 key_buffer 的百分比。高水位线。 -- 降低 key_buffer_size 以避免不必要的内存使用。

( innodb_buffer_pool_size / _ram ) = 6144M / 15360M = 40.0% -- 用于 InnoDB 的 RAM 百分比 buffer_pool

( Innodb_buffer_pool_pages_free * 16384 / innodb_buffer_pool_size ) = 392,768 * 16384 / 6144M = 99.9% -- 缓冲池空闲

( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF -- 是否记录所有死锁。 -- 如果您为死锁所困扰,请打开它。注意:如果有很多死锁,这可能会向磁盘写入大量内容。

( local_infile ) = local_infile = ON -- local_infile = ON 是一个潜在的安全问题

( expire_logs_days ) = 0 -- 多久自动清除binlog(这么多天后) -- 太大(或零)= 消耗磁盘 space;太小 = 需要快速响应 network/machine 崩溃。 (如果 log_bin = OFF 则不相关)

( long_query_time ) = 5 -- 定义 "slow" 查询的截止时间(秒)。 -- 建议 2

异常大:

read_buffer_size = 32MB
Acl_database_grants = 780
Acl_proxy_users = 4
Acl_users = 281

Columstore.xml

全部 内存的 95%??

    <MemoryCheckPercent>95</MemoryCheckPercent> <!-- Max real memory to limit growth of buffers to -->
    <DataFileLog>OFF</DataFileLog>

我想这不相关,因为它被注释掉了??

    <!-- enable if you want to limit how much memory may be used for hdfs read/write memory buffers.
    <hdfsRdwrBufferMaxSize>8G</hdfsRdwrBufferMaxSize>
    -->

请记住,除列存储外,MySQL 消耗大量内存:

    <TotalUmMemory>25%</TotalUmMemory>
    <TotalPmUmMemory>10%</TotalPmUmMemory>