我正在運行此服務器以進行數據挖掘。它並行運行多個計算密集型數據挖掘應用程序,並同時訪問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