我一直在build立一个新的VPS,并想尝试MariaDB。 我正在使用MariaDB 10.0.1,据我了解,它是相当于MySQL 5.6。
从MariaDB / MySQL 5.5开始,线程的线程处理是否发生了巨大变化? 这是我在旧服务器(CentOS 5.9,MySQL 5.5)上看到的:
在MariaDB 10(MySQL 5.6)的Centos 6.3上:
以下是一些事实:
在服务器A(CentOS 5.9,MySQL 5.5)上:
/etc/my.cnf中
[mysqld] local-infile=0 query_cache_type = 1 query_cache_size = 32M datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Misc vars key_buffer_size=32M join_buffer_size=512K tmp_table_size=32M max_heap_table_size=32M thread_cache_size=4 table_cache=300 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # InnoDB vars innodb_buffer_pool_size=96M innodb_additional_mem_pool_size=500K innodb_log_buffer_size=500K innodb_thread_concurrency=2
在服务器B(CentOS 6.3,MariaDB 10)上:
/etc/my.cnf.d/server.cnf
[mysqld] # threads thread_concurrency=2 thread_cache_size=1 thread_handling=one-thread-per-connection thread_pool_size=4 thread_pool_max_threads=4 thread_pool_idle_timeout=60 thread_stack=240K # Limit Connections? # max_connections=5 skip-external-locking key_buffer_size=64M max_allowed_packet=1M table_open_cache=128 sort_buffer_size=1M read_buffer_size=1M read_rnd_buffer_size=4M net_buffer_length=8K myisam_sort_buffer_size=32M query_cache_size=16M # innodb settings innodb_buffer_pool_size=32M innodb_additional_mem_pool_size=2M innodb_flush_log_at_trx_commit=1 innodb_lock_wait_timeout=30 innodb_thread_concurrency=0
为什么有这么多的线程? 我已经尝试了很多设置来尝试将进程线程的数量降低到一个合理的水平,但我似乎无法影响它。 它总是使用20或21个线程。 我可以通过调整innodb_buffer_pool_size
来减less内存使用量,但32M在10个以上的站点上运行并不合理,所以我会把它提高到96M或128M。 在这些值的MySQL内存使用RAM超过750-850M的内存。
如果这只是我必须忍受的事情,那没关系(我对新的VPS,YOLO有更多的评价),但是我只是好奇为什么在内存使用上有这么大的差距。
另外值得一提的是,如果我在两台VPS上都closures了mysql,我几乎可以使用相同数量的ram– A为300M,B为-260M。
MySQL应该尽可能多的使用你的空闲内存。 这种规模的线程数量非常小,不会影响内存使用量。 线程共享相同的虚拟内存空间。 他们只使用几个KB的线程元数据。
新MySQL上的内存使用量实际上比以前less了。 它已经在虚拟内存空间中分配了1.1GB,但物理内存只有60MB。
在寻找优化MySQL的时候,先试着将瓶颈从磁盘I / O转移到内存访问。 还优化查询(重写它们,索引) – 启用MySQL慢查询日志。
有时你达到了硬件限制,唯一的优化就是升级硬件。 对于MySQL,首先要增加更多的RAM,更快的磁盘,然后增加更多的CPU。