【发布时间】:2014-09-20 03:14:07
【问题描述】:
我正在运行此服务器以进行数据挖掘。它并行运行多个计算密集型数据挖掘应用程序,并同时访问 MySQL 服务器。
这里是配置。
服务器配置:8 核 Intel Xeon、16GB RAM、500GB 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 秒的合理响应时间。请让我知道是否有任何方法可以进一步优化。
【问题讨论】:
标签: mysql sql performance