**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
去年关门了。
改进这个问题
我有一个mysql,有100000个表。对于我的系统来说,这是目前最好的设计,因为这些表彼此不相关,选择查询将只在一个表上。此外,用户很可能不会经常访问相同的表。
我有16gbram,但大约一天后,mysql消耗了其中的90%,而我对系统的总内存使用率为99-100%。我尝试了很多方法,但都无法降低内存使用率。
我的 innodb_buffer_pool_size
目前是8gb,但我有它在1g与同一问题。我也试着减少 open_files_limit
但这也没用。
这是我的输出
SHOW GLOBAL STATUS LIKE '%Open_%';
+----------------------------+----------+
| Variable_name | Value |
+----------------------------+----------+
| Com_show_open_tables | 0 |
| Innodb_num_open_files | 431 |
| Open_files | 0 |
| Open_streams | 0 |
| Open_table_definitions | 615 |
| Open_tables | 416 |
| Opened_files | 4606655 |
| Opened_table_definitions | 4598528 |
| Opened_tables | 4661002 |
| Slave_open_temp_tables | 0 |
| Table_open_cache_hits | 30024782 |
| Table_open_cache_misses | 4661002 |
| Table_open_cache_overflows | 4660579 |
+----------------------------+----------+
这是我的mysqld配置:
sql-mode=''
innodb_buffer_pool_size = 8G
open_files_limit=100000
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address = 127.0.0.1
key_buffer_size = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover-options = BACKUP
query_cache_limit = 1M
query_cache_size = 16M
log_error = /var/log/mysql/error.log
expire_logs_days = 10
max_binlog_size = 100M
有人知道如何有效地处理这几千张table吗?
附加信息
a) mysqld公司:https://pastebin.com/ptiz6urd
b) 显示全局状态:https://pastebin.com/k4scmvfz
c) 显示全局变量:https://pastebin.com/cc64bauw
d) mysqltuner:https://pastebin.com/zlzayi56
e) 显示引擎innodb状态:https://pastebin.com/hhduw6gy
f) 顶部:https://pastebin.com/6wynsnpm
服务器重新启动后的测试(占用的内存很少):
a) 乌利米特-a:https://pastebin.com/fmprakhu
b) iostat-x:https://pastebin.com/l0g7h8s4
c) 测向-h:https://pastebin.com/d3ettr19
d) mysqltuner:https://pastebin.com/t3dydlg8
1条答案
按热度按时间wn9m85ua1#
要删除的第一个块将在linux命令行ulimit-n124000中,以超过当前1024个打开文件的限制现在就可以完成,不需要关闭/重新启动linux就可以激活它。
为您的my.cnf[mysqld]部分考虑的建议
考虑到你的情况,我会跳过一天一个的规则,在下一个全局变量改变之前进行监视。进行所有cnf更改。停止/启动服务是必需的,因为您在mysql中只能打开\u文件\u limit,即使您请求100000 ulimit,但运行时将您限制为1024。
如果将块复制粘贴到mysqld节的末尾,只删除mysqld节中块上方相同的命名变量,则将为下一个分析人员消除“多变量混淆”。
请查看个人资料以获取联系信息并取得联系。