IVB Posted May 12, 2013 Доброго времени суток. Нужен профессиональный совет. Есть самосборный сервер: - мать MSI 990FXA-GD65 - проц AMD FX™-6100 (3.3GHz) - память DDR3 4x8Gb 667MHz - диски 3 x WD4500HLHX (SATAIII, 10000rpm, 450Gb) В качестве ОС установлен Gentoo Linux x64 с ядром 3.2.1 Диски объединены в программный RAID5 общей емкостью 900Gb Назначение сервера - выделенный MySQL сервер. На сегодняшний день на сервере расположены следующие базы данных: - биллинг (самописный) - биллинг (UserSide) - форум (VBulletin 3.x) - 2 самописных системы мониторинга (друг друга не дублируют) + несколько "легких" БД, которыми можно пренебречь. Даже при такой нагрузке периодически возникают моменты, когда приложения, обращающиеся в БД, "подтормаживают". Когда же я поставил на этот же сервер pgsql и попытался развернуть из бэкапа БД zabbix (раньше эта БД располагалась на другом сервере) - практически все запросы к БД MySQL "замерзли". Решили не заморачиваться с pgsql и запустить zabbix с "чистой" БД MySQL (на этом же выделенном MySQL сервере). Однако запуск zabbix-сервера привел к довольно серьезным тормозам других приложений, работающих с БД (естественно, сам zabbix-сервер находится на другом сервере). В итоге БД zabbix вынесли на другой сервер, а передо мной встал вопрос: чем же вызван тот предел производительности, который мы имеем на сегодняшний день. Исходя из того, что запуск pgsql на этом же сервере "затормозил" работу MySQL - дело не в неоптимальных настройках той или другой БД. Я пока "грешу" на программный RAID5 - но это чисто субъективное ощущение, т.к. я не вижу, чтобы процессор был загружен даже в те моменты, когда в БД "затор" из запросов. Как и чем можно определить, в чем же узкое место вышеописанного сервера? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nuclearcat Posted May 12, 2013 Попробуйте промониторить i/o с помощью iostat (пакет sysstat) Вот пример: db ~ # iostat -k -x -d 1 Linux 3.8.3db-3 (db) 05/12/13 _x86_64_ (16 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.45 153.29 27.83 338.49 438.45 2363.12 15.30 0.43 1.16 5.48 0.81 0.46 17.03 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 167.00 20.00 376.00 96.00 2064.00 10.91 0.09 0.32 1.10 0.27 0.19 7.60 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 123.00 14.00 277.00 56.00 1472.00 10.50 0.05 0.16 0.07 0.17 0.16 4.70 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vlad11 Posted May 12, 2013 Покажите mysqladmin variables Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NiTr0 Posted May 12, 2013 Исходя из того, что запуск pgsql на этом же сервере "затормозил" работу MySQL - дело не в неоптимальных настройках той или другой БД. В них, родимых. Настройки мускула по дефолту не пригодны для интенсивной нагрузки. Заббикс с менее чем 2к источников данных, большая часть из которых опрашивается раз в минуту, генерирует порядка 200 иопс на запись на дефолтном конфиге мускула, дисковая подсистема при этом в полке. Тюнинг мускула снижает иопс где-то до 40 (!) за счет укрупнения блоков. + ко всему - рэйд 5 не самый оптимальный с т.з. производительности на запись. Рэйд 1 - лучше, 10 - еще лучше. + говорят, flashcache чудеса творит, давая скорость SSD при надежности старого доброго рэйда из hdd, ценой мелкого ssd диска (выход которого из строя не фатален для данных). Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alkanaft Posted May 12, 2013 (edited) frebsd или solaris zfs zraid или http://en.wikipedia.org/wiki/Geom_raid5 хотя лучше просто зеркало и полный тюнинг системы и my.cnf в часности Edited May 12, 2013 by alkanaft Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted May 13, 2013 Был такой хороший Jet Profiler для mysql, в нем можно посмотреть - какой запрос гнобит сервер. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alkanaft Posted May 13, 2013 а есть еще mtop Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
IVB Posted May 13, 2013 Покажите mysqladmin variables +-----------------------------------------+-------------------------------------------------------------------------------------------+ | Variable_name | Value | +-----------------------------------------+-------------------------------------------------------------------------------------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | autocommit | ON | | automatic_sp_privileges | ON | | back_log | 50 | | basedir | /usr/ | | big_tables | OFF | | binlog_cache_size | 32768 | | binlog_direct_non_transactional_updates | OFF | | binlog_format | ROW | | bulk_insert_buffer_size | 8388608 | | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | | completion_type | 0 | | concurrent_insert | 2 | | connect_timeout | 10 | | datadir | /var/mysql/ | | date_format | %Y-%m-%d | | datetime_format | %Y-%m-%d %H:%i:%s | | default_week_format | 0 | | delay_key_write | ON | | delayed_insert_limit | 100 | | delayed_insert_timeout | 300 | | delayed_queue_size | 1000 | | div_precision_increment | 4 | | engine_condition_pushdown | ON | | error_count | 0 | | event_scheduler | OFF | | expire_logs_days | 7 | | flush | OFF | | flush_time | 0 | | foreign_key_checks | ON | | ft_boolean_syntax | + -><()~*:""&| | | ft_max_word_len | 84 | | ft_min_word_len | 4 | | ft_query_expansion_limit | 20 | | ft_stopword_file | (built-in) | | general_log | OFF | | general_log_file | /var/run/mysqld/mysqld.log | | group_concat_max_len | 1024 | | have_community_features | NO | | have_compress | YES | | have_crypt | YES | | have_csv | YES | | have_dynamic_loading | YES | | have_geometry | YES | | have_innodb | YES | | have_ndbcluster | NO | | have_openssl | DISABLED | | have_partitioning | NO | | have_query_cache | YES | | have_rtree_keys | YES | | have_ssl | DISABLED | | have_symlink | YES | | hostname | mysqls | | identity | 0 | | ignore_builtin_innodb | OFF | | init_connect | | | init_file | | | init_slave | | | innodb_adaptive_hash_index | ON | | innodb_additional_mem_pool_size | 6291456 | | innodb_autoextend_increment | 8 | | innodb_autoinc_lock_mode | 1 | | innodb_buffer_pool_size | 262144000 | | innodb_checksums | ON | | innodb_commit_concurrency | 0 | | innodb_concurrency_tickets | 500 | | innodb_data_file_path | ibdata1:10M:autoextend:max:512M | | innodb_data_home_dir | | | innodb_doublewrite | ON | | innodb_fast_shutdown | 1 | | innodb_file_io_threads | 4 | | innodb_file_per_table | ON | | innodb_flush_log_at_trx_commit | 1 | | innodb_flush_method | | | innodb_force_recovery | 0 | | innodb_lock_wait_timeout | 50 | | innodb_locks_unsafe_for_binlog | OFF | | innodb_log_buffer_size | 8388608 | | innodb_log_file_size | 52428800 | | innodb_log_files_in_group | 2 | | innodb_log_group_home_dir | ./ | | innodb_max_dirty_pages_pct | 90 | | innodb_max_purge_lag | 0 | | innodb_mirrored_log_groups | 1 | | innodb_open_files | 300 | | innodb_rollback_on_timeout | OFF | | innodb_stats_method | nulls_equal | | innodb_stats_on_metadata | ON | | innodb_support_xa | ON | | innodb_sync_spin_loops | 20 | | innodb_table_locks | ON | | innodb_thread_concurrency | 10 | | innodb_thread_sleep_delay | 10000 | | innodb_use_legacy_cardinality_algorithm | ON | | insert_id | 0 | | interactive_timeout | 604800 | | join_buffer_size | 4194304 | | keep_files_on_create | OFF | | key_buffer_size | 1073741824 | | key_cache_age_threshold | 300 | | key_cache_block_size | 1024 | | key_cache_division_limit | 100 | | language | /usr/share/mysql/english/ | | large_files_support | ON | | large_page_size | 0 | | large_pages | OFF | | last_insert_id | 0 | | lc_time_names | en_US | | license | GPL | | local_infile | ON | | locked_in_memory | OFF | | log | OFF | | log_bin | ON | | log_bin_trust_function_creators | ON | | log_bin_trust_routine_creators | ON | | log_error | /var/log/mysql/mysqld.err | | log_output | FILE | | log_queries_not_using_indexes | ON | | log_slave_updates | OFF | | log_slow_queries | OFF | | log_warnings | 1 | | long_query_time | 10.000000 | | low_priority_updates | ON | | lower_case_file_system | OFF | | lower_case_table_names | 0 | | max_allowed_packet | 134217728 | | max_binlog_cache_size | 18446744073709547520 | | max_binlog_size | 1073741824 | | max_connect_errors | 10 | | max_connections | 1000 | | max_delayed_threads | 20 | | max_error_count | 64 | | max_heap_table_size | 67108864 | | max_insert_delayed_threads | 20 | | max_join_size | 18446744073709551615 | | max_length_for_sort_data | 1024 | | max_long_data_size | 134217728 | | max_prepared_stmt_count | 16382 | | max_relay_log_size | 0 | | max_seeks_for_key | 18446744073709551615 | | max_sort_length | 1024 | | max_sp_recursion_depth | 0 | | max_tmp_tables | 32 | | max_user_connections | 0 | | max_write_lock_count | 18446744073709551615 | | min_examined_row_limit | 0 | | multi_range_count | 256 | | myisam_data_pointer_size | 6 | | myisam_max_sort_file_size | 5368709120 | | myisam_mmap_size | 18446744073709551615 | | myisam_recover_options | OFF | | myisam_repair_threads | 1 | | myisam_sort_buffer_size | 31457280 | | myisam_stats_method | nulls_unequal | | myisam_use_mmap | OFF | | net_buffer_length | 8192 | | net_read_timeout | 30 | | net_retry_count | 10 | | net_write_timeout | 60 | | new | OFF | | old | OFF | | old_alter_table | OFF | | old_passwords | OFF | | open_files_limit | 9202 | | optimizer_prune_level | 1 | | optimizer_search_depth | 62 | | optimizer_switch | index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on | | pid_file | /var/run/mysqld/mysqld.pid | | plugin_dir | /usr/lib64/mysql/plugin | | port | 3306 | | preload_buffer_size | 32768 | | protocol_version | 10 | | pseudo_thread_id | 4069742 | | query_alloc_block_size | 8192 | | query_cache_limit | 67108864 | | query_cache_min_res_unit | 4096 | | query_cache_size | 536870912 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | | query_prealloc_size | 8192 | | rand_seed1 | | | rand_seed2 | | | range_alloc_block_size | 4096 | | read_buffer_size | 524288 | | read_only | OFF | | read_rnd_buffer_size | 1048576 | | relay_log | | | relay_log_index | | | relay_log_info_file | relay-log.info | | relay_log_purge | ON | | relay_log_space_limit | 0 | | report_host | | | report_password | | | report_port | 3306 | | report_user | | | rpl_recovery_rank | 0 | | secure_auth | OFF | | secure_file_priv | | | server_id | 99 | | skip_external_locking | ON | | skip_name_resolve | ON | | skip_networking | OFF | | skip_show_database | OFF | | slave_compressed_protocol | OFF | | slave_exec_mode | STRICT | | slave_load_tmpdir | /tmp/ | | slave_net_timeout | 3600 | | slave_skip_errors | OFF | | slave_transaction_retries | 10 | | slow_launch_time | 2 | | slow_query_log | OFF | | slow_query_log_file | /var/run/mysqld/mysqld-slow.log | | socket | /var/run/mysqld/mysqld.sock | | sort_buffer_size | 1048576 | | sql_auto_is_null | ON | | sql_big_selects | ON | | sql_big_tables | OFF | | sql_buffer_result | OFF | | sql_log_bin | ON | | sql_log_off | OFF | | sql_log_update | ON | | sql_low_priority_updates | ON | | sql_max_join_size | 18446744073709551615 | | sql_mode | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | | sql_notes | ON | | sql_quote_show_create | ON | | sql_safe_updates | OFF | | sql_select_limit | 18446744073709551615 | | sql_slave_skip_counter | | | sql_warnings | OFF | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_key | | | storage_engine | MyISAM | | sync_binlog | 0 | | sync_frm | ON | | system_time_zone | EEST | | table_definition_cache | 256 | | table_lock_wait_timeout | 50 | | table_open_cache | 4096 | | table_type | MyISAM | | thread_cache_size | 38 | | thread_handling | one-thread-per-connection | | thread_stack | 262144 | | time_format | %H:%i:%s | | time_zone | SYSTEM | | timed_mutexes | OFF | | timestamp | 1368432405 | | tmp_table_size | 268435456 | | tmpdir | /tmp/ | | transaction_alloc_block_size | 8192 | | transaction_prealloc_size | 4096 | | tx_isolation | REPEATABLE-READ | | unique_checks | ON | | updatable_views_with_limit | YES | | version | 5.1.61-log | | version_comment | Gentoo Linux mysql-5.1.61 | | version_compile_machine | x86_64 | | version_compile_os | pc-linux-gnu | | wait_timeout | 604800 | | warning_count | 0 | +-----------------------------------------+-------------------------------------------------------------------------------------------+ Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
IVB Posted May 13, 2013 Настройки мускула по дефолту не пригодны для интенсивной нагрузки. Я довольно много времени уделил настройкам мускуля. Именно под большие нагрузки. Но я сильно сомневаюсь, что добился максимального результата... Хотелось бы понять - стОит ли и дальше "вылизывать" настройки, или дешевле будет добавить 4-й винт и переразбить RAID5 в RAID10. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
snark Posted May 13, 2013 Я довольно много времени уделил настройкам мускуля. Именно под большие нагрузки. Возможно мне кажется, но конфиг говорит об обратном: +---------------------------------------+-------------------------------------------------------------------------------------------+ | Variable_name | Value | +---------------------------------------+-------------------------------------------------------------------------------------------+ ... | innodb_additional_mem_pool_size | 6291456 | ... | innodb_buffer_pool_size | 262144000 | ... | innodb_data_file_path | ibdata1:10M:autoextend:max:512M | ... | innodb_file_per_table | ON | | innodb_flush_log_at_trx_commit | 1 | | innodb_flush_method | | ... | innodb_log_buffer_size | 8388608 | | innodb_log_file_size | 52428800 | ... +---------------------------------------+-------------------------------------------------------------------------------------------+ Почитайте про что-то в духе: innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT Ну и про размеры буферов для InnoDB ;) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
IVB Posted May 13, 2013 Я довольно много времени уделил настройкам мускуля. Именно под большие нагрузки. Возможно мне кажется, но конфиг говорит об обратном: Ну я ведь там же отметил, что я сильно сомневаюсь, что добился максимального результата Более того, до этой минуты я был уверен, что у меня параметр innodb_flush_log_at_trx_commit равен именно 2-м... Спасибо, что обратили внимание. В своем конфиге очень часто не замечаешь своих ошибок :( Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NiTr0 Posted May 13, 2013 log_slow_queries еще включите, на всякий. Долгие запросы журналировать... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
IVB Posted May 15, 2013 log_slow_queries еще включите, на всякий. Долгие запросы журналировать... Ну увижу я, что определенные запросы долго выполняются. Даже если это самописный софт - нужно время на его переписывание. А если это ПО сторонних разработчиков? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
^rage^ Posted May 15, 2013 frebsd или solaris zfs zraid или http://en.wikipedia.org/wiki/Geom_raid5 это очень плохой выбор. особенно zfs. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
FATHER_FBI Posted May 15, 2013 frebsd или solaris zfs zraid или http://en.wikipedia.org/wiki/Geom_raid5 это очень плохой выбор. особенно zfs. Обгрунтуйте ваше мнение по поводу zfs. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NiTr0 Posted May 15, 2013 Ну увижу я, что определенные запросы долго выполняются. Подумаете, подтюните иднексы... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sexst Posted May 15, 2013 говорят, flashcache чудеса творит, давая скорость SSD при надежности старого доброго рэйда из hdd, ценой мелкого ssd диска (выход которого из строя не фатален для данных). Не то что бы дико чудеса. Говорю со всей ответственностью как владелец дико нагруженного mysql сервера. А вообще пара ssd дисков в зеркало стоит не так уж и дорого, а чистые ssd творят действительно чудеса. Главное менять их в зеркале в шахматном порядке на новые раз в года полтора. А то сдохнут приблизительно одновременно от износа. ЗЫ: Если у вас чисто innodb, то стоит еще покурить в сторону innodb_locks_unsafe_for_binlog (это если на чистую транзакционность немного насрать) и работу с блочными устройствами в raw режиме. Первое при острой конкурентной работе может давать ошеломляющий прирост. ЗЫЫ: innodb_lock_wait_timeout увелисьте до пары минут - на нагруженных серверах может быть причиной тупой потери данных. Ну и по поводу рейда. ПОлезно вынести бинлог рейда с самого рейда и скормить ядру опцию вида echo 8192 > /sys/block/mdXXX/md/stripe_cache_size Оно здорово повысит отзывчивость самого массива (Сбрасывается при ребуте, засутьте куда-нибудь в rc.local). Хотя как уже сказали RAID5/6, мягко говоря, не самая подходящая вещь для высоких IOPS. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted May 16, 2013 говорят, flashcache чудеса творит, давая скорость SSD при надежности старого доброго рэйда из hdd, ценой мелкого ssd диска (выход которого из строя не фатален для данных). Не то чтобы чудеса, но прирост заметен: monitor wingman # cat /proc/flashcache/sda+sdb4/flashcache_stats reads=6746987 writes=1744428603 read_hits=4849017 [b]read_hit_percent=71 write_hits=1735057227 write_hit_percent=99[/b] replacement=0 write_replacement=0 write_invalidates=0 read_invalidates=0 pending_enqueues=72 pending_inval=72 no_room=0 disk_reads=1897972 disk_writes=1735057198 ssd_reads=4849016 ssd_writes=1746326645 uncached_reads=0 uncached_writes=72 uncached_IO_requeue=0 uncached_sequential_reads=0 uncached_sequential_writes=0 pid_adds=0 pid_dels=0 pid_drops=0 pid_expiry=0 Как раз на сервере для мониторинга: жабикс, его БД и куча скриптов Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...