我正在运行此服务器以进行数据挖掘。它并行运行多个计算密集型数据挖掘应用程序,并同时访问MySQL服务器。
以下是配置。
服务器配置:8核Intel Xeon,16GB RAM,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
这表明在峰值计算时间内,与mysql服务器建立了大约120个连接。 MySQL消耗大约9.5GB的内存,并使用98-99%的CPU,我仍然可以使用它。但是在这段时间内使用php / javascript构建的前端站点需要大约1-2分钟来加载,这是因为mysql在这些时间内响应非常慢。虽然通常需要大约890毫秒到4秒。
我想知道如何进一步优化mysql服务器配置。目前从发布的my.cnf可以看出,缓冲池为4GB,最大连接数设置为3000。所有的表都是具有适当索引的Innodb,但在我的情况下,事务安全不是主要问题,唯一的问题是性能。数据挖掘应用程序使用MySQL C API Connector,每个都有大约24个并行线程运行,相当于24个与MySQL同时连接
如何进一步优化mysql服务器配置,以便我可以获得大约10-15秒的合理响应时间,以便进行前端访问。如果有任何方法可以进一步优化,请告诉我。
答案 0 :(得分:2)
你真的应该专门用于数据挖掘的另一台服务器,并在MySQL服务器之间设置复制。数据挖掘应用程序应使用事务将多个小查询合并为块。这样,您的站点就不会等待执行其他查询,并且会在后台进行同步而不会出现明显的延迟。
另一个选择是尽可能地缓存,并希望用户在繁重的工作时间内不会请求不在缓存中的数据。
但我更愿意做这两件事,这样你才能获得100%可靠的服务。