2015-03-13 120 views
-5

我們有一個專門的數據庫服務器(MariaDB 5.5.31)託管我們的數據庫由我們的Java應用程序使用(通過hibernate從另一臺服務器訪問數據庫)。雖然我們的數據庫本身正在使用大約12GB的RAM,但操作系統(CentOS 6.4)的緩存大約爲25GB。MySQL操作系統緩存

你能給我任何建議,我們如何影響這種行爲?

儘管我們的100個表中的大多數都有不到1000個條目,但我們還是有一些1000萬以上的表。這些表經歷了大量的讀寫操作。

這些都是我們的DB設置:

[server] 

[mysqld] 
port   = 3306 
socket   = /var/lib/mysql/mysql.sock 
character-set-server = utf8 
collation-server=utf8_general_ci 
skip-external-locking 
back_log = 50 
max_connections = 100 
max_connect_errors = 10 
table_open_cache = 2048 
max_allowed_packet = 16M 
max_heap_table_size = 64M 
read_buffer_size = 2M 
read_rnd_buffer_size = 16M 
sort_buffer_size = 8M 
join_buffer_size = 16M 
thread_cache_size = 8 
thread_concurrency = 8 
query_cache_size = 128M 
query_cache_limit = 2M 
thread_stack = 240K 
transaction_isolation = REPEATABLE-READ 
tmp_table_size = 64M 
binlog_cache_size = 1M 
log-bin=mysql-bin 
binlog_format=mixed 
expire_logs_days = 2 

#*** MyISAM Specific options 
key_buffer_size = 384M 
bulk_insert_buffer_size = 64M 
myisam_sort_buffer_size = 128M 
myisam_max_sort_file_size = 10G 
myisam_repair_threads = 1 
myisam_recover 

# *** INNODB Specific options *** 
innodb_additional_mem_pool_size = 16M 
innodb_buffer_pool_size = 10G 
innodb_data_home_dir = /var/lib/mysql 
innodb_write_io_threads = 8 
innodb_read_io_threads = 8 
innodb_thread_concurrency = 16 
innodb_flush_log_at_trx_commit = 1 
innodb_log_buffer_size = 8M 
innodb_max_dirty_pages_pct = 90 
innodb_lock_wait_timeout = 120 

[embedded] 
[mysqld-5.5] 
[mariadb] 
[mariadb-5.5] 
+0

請問您能分享存儲超過百萬條記錄的表格的信息嗎?那些Innodb或ISAM?什麼是時間相關的領域,以及那裏有什麼樣的數據?那裏有索引嗎?表格數據是否已完成? – 2015-03-13 14:29:51

回答

0

如果數以百萬計的記錄表是事務表,然後下面是最重要的事情要做:

  1. 列表中的子表的那些表。
  2. 與客戶進行討論並制定備用計劃,即表中只保留1/1.5/2年的數據。
  3. 如果有很多,可以與當時一起備份子表的數據有2種選擇:

    一)對備份數據

    b)一種非規範化表有一個表中的每個罐被命名爲original_table_name_bk

應該有定期的計劃說了備份過程中,每3個月,在困難時期,preferrably過程將運行,並且從交易表的數據移動到備份表。

現在,您的數據庫中既有歷史數據又有當前數據,而不會影響事務操作的性能。

+0

所有的表都是innodb表,是​​的,數據是時間相關的,我們有索引。 不幸的是,我們的大部分數據都在一年之內,我們計劃爲舊數據實施備份策略。 我很困惑操作系統正在緩存數據庫大小的兩倍。 我是否缺少一些會導致操作系統緩存更少的重要設置? – tflu 2015-03-13 14:59:14

+0

@tflu聽起來不錯...由於isam表包含更多數據,因此可以檢查是否有將備份列作爲ISAM的可能性。在任何一種情況下,mysql都不是針對Multi-billion記錄設計的,因此您可能還需要從備份表中刪除數據。那時你可以計劃在某些數據倉庫或文檔庫中獲得這些數據,並使用elasticsearch來檢索它。 – 2015-03-13 15:02:04

+0

mysql數據庫中1000萬條交易表記錄太多。請求DBA運行統計數據並查看影響。 – 2015-03-13 15:04:00