2015-03-13 4 views
-5

У нас есть выделенный сервер базы данных (MariaDB 5.5.31), в котором размещена наша база данных, используемая нашим Java-приложением (доступ к db через спящий режим с другого сервера). В то время как в нашей базе данных используется около 12 ГБ ОЗУ, операционная система (CentOS 6.4) дополнительно кэширует около 25 гб.Кэш операционной системы MySQL

Можете ли вы дать мне какие-либо советы, как мы можем влиять на это поведение?

Хотя большинство наших 100 таблиц имеют менее 1000 записей, у нас есть несколько таблиц с более чем 10 миллионами. В этих таблицах много чтений и записей.

Это наши настройки ДБ:

[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? Что такое связанная с временем область и какие данные поступают там? Есть ли там какой-нибудь индекс? Делаются ли таблицы статистики? –

ответ

0

Если таблицы с миллионами записей являются транзакционными таблицами, то следующими будут передовые вещи, чтобы сделать:

  1. Списка дочерних таблиц для этих таблиц ,
  2. Обсудить с клиентом и иметь план резервного копирования, то есть только 1/1,5/2 года данных, которые должны храниться в таблице.
  3. Если есть много данных дочерней таблицы, которые могут быть подкреплены вместе с тогдашним имеют 2 варианта:

    а) имеют одну Денормализованные таблицу для резервного копирования данных

    б) имеют одну таблицу для каждого может быть назван original_table_name_bk

Там должна быть процесс резервного копирования планируется периодически говорят, каждый 3 месяц, когда предпочтительна во время постного периода процесс будет работать и перемещать данные из транзакционной таблицы для резервного копирования таблицы.

Теперь у вас есть как исторические, так и текущие данные в вашей базе данных, не влияя на производительность транзакционных операций.

+0

Все таблицы являются таблицами innodb и да, данные связаны по времени, и у нас есть индексы. К сожалению, большинство наших данных находятся за один год, и мы планируем внедрить стратегии резервного копирования для более старых данных. Я сбиваю с толку, что операционная система кэширует примерно вдвое больше размера базы данных. Я пропустил некоторые важные настройки, которые могут привести к снижению кэша ОС? – tflu

+0

@tflu Это звучит хорошо ... Поскольку таблицы isam содержат больше данных, вы можете проверить возможность наличия резервных столбцов как ISAM. В любом случае mysql не предназначен для многомиллиардных записей, поэтому вам также может потребоваться удалить данные из таблиц резервного копирования. В этот раз вы можете планировать эти данные либо в каком-то хранилище данных, либо в репозитории документов, и использовать elasticsearch для его получения. –

+0

10 миллионов записей для транзакционной таблицы слишком много в базе данных mysql. Попросите DBA запустить статистику и увидеть влияние. –

Смежные вопросы