我正在运行此服务器以进行数据挖掘。它并行运行多个计算密集型数据挖掘应用程序,并同时访问MySQL服务器。mysql - 即使有大量可用连接,响应速度也非常慢
这里是配置。
服务器配置:8核英特尔至强处理器,16GB内存,500 GB SAS驱动器
MySQL的my.cnf文件
[client]
#password = [your_password]
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysqld]
# generic configuration options
port = 3306
socket = /var/lib/mysql/mysql.sock
datadir = /database/mysql
log_bin = OFF
expire-logs-days = 3
pid-file = /database/mysql/localhost.localdomain.pid
back_log = 50
max_connections = 3000
max_connect_errors = 100
table_open_cache = 2048
max_allowed_packet = 16M
binlog_cache_size = 1M
max_heap_table_size = 64M
read_buffer_size = 128M
read_rnd_buffer_size = 32M
sort_buffer_size = 32M
join_buffer_size = 8M
thread_cache_size = 8
thread_concurrency = 4
query_cache_size = 64M
query_cache_limit = 2M
ft_min_word_len = 4
default-storage-engine = innodb
thread_stack = 192K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
log-bin = mysql-bin
binlog_format = mixed
server-id = 1
key_buffer_size = 32M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
innodb_additional_mem_pool_size = 32M
innodb_buffer_pool_size = 4G
innodb_data_file_path = ibdata1:10M:autoextend
#innodb_data_home_dir = <directory>
innodb_write_io_threads = 8
innodb_read_io_threads = 8
#innodb_force_recovery = 6
innodb_thread_concurrency = 0
innodb_flush_log_at_trx_commit= 2
#innodb_fast_shutdown
innodb_log_buffer_size = 8M
innodb_log_file_size = 1G
innodb_log_files_in_group = 3
#innodb_log_group_home_dir
innodb_max_dirty_pages_pct = 90
#innodb_flush_method = O_DSYNC
innodb_lock_wait_timeout = 120
[mysqldump
quick
max_allowed_packet = 16M
[mysql]
auto-rehash
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192
只有2谁访问此服务器,其中包括我的用户。在高峰时间,我得到这个
mysql > show processlist
...
120 rows in set
这表明,约120连接建立到MySQL服务器在峰值计算时间。 MySQL消耗大约9.5GB的内存,并使用98-99%的CPU,我仍然可以忍受。但在此期间,使用php/javascript构建前端网站需要大约1 - 2分钟的时间才能加载,这是因为在这些时间内,mysql的响应速度非常缓慢。通常需要890毫秒到4秒的时间。
我想知道如何进一步优化mysql服务器配置。目前从发布的my.cnf中可以看出,缓冲池为4GB,最大连接数为3000。所有的表都是Innodb的适当索引,但在我的情况下,交易安全不是问题的主要问题,唯一的问题是性能。数据挖掘应用程序使用MySQL C API连接器,每个连接器都有大约24个并行线程运行,相当于24个同时连接到MySQL
如何进一步优化mysql服务器配置,以便可以获得大约10的合理响应时间 - 前端访问15秒。请让我知道是否有任何方法进一步优化。
是的,我正在使用的这台服务器完全专用于此数据挖掘目的。前端仅显示在简单用户界面中从数据库中检索的表格。只有2个用户访问前端,包括我,并且不再有用户作为其私人服务器。但是,请您详细说明或提供显示如何“使用事务将多个小查询合并为块”的任何链接。目前数据完整性的优先级低于计算性能和MySQL性能,尤其是SELECT和INSERT。 – Maxx 2014-09-21 02:56:04
Btw发送到服务器的98%的查询都是简单的SELECT和INSERT。一些最常用的查询使用1级嵌套SELECTS,而使用JOINS的查询每个循环只执行一次,所以它像JOIN每5000次查询只执行一次。 – Maxx 2014-09-21 02:57:58
我还应该提到的另一件事是,有大约12个数据库。其中9人拥有超过500万张桌子。每个表格都是针对由数据库分类的特定产品功能。 – Maxx 2014-09-21 03:02:12