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>
我们已经安装了 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>