Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Перешли с винды на Linux, MySQL 5.1. Есть пару больших запросов (джойнится с десяток таблиц, куча критерией). Так вот при запуске на винде в процессах пишет Sorting Data а потом Sending Data (выполняется пару минут). При запуске на Linux пишет сразу Sending Data ??? При этом тоже выполняется быстро если нет пользователей. Если есть нагрузка на серваке в виде юзеров (хотя нагрузка пустяковая), то запрос повисает на смерть (выполняется более 40 минут потом просто убиваю процесс).
Вопрос1: Почему в винде Sorting Data а под Linux сразу Sending Data?
Вопрос2: Почему виснет при подключенных юзверях?
Догадка1: Не может получить нужных доступ к занятой таблице???
Догадка2: Пытается отослать данные на сторону клиента для обработки???
Неактивен
Если пишет sending - значит, уже отсортировал и посылает данные.
Догадка 1, скорее всего, правильная - просто так пользователи никакой нагрузки не делают - они
работают с этими таблицами => есть блокировки какие-то.
Встречный вопрос - Вы, случаем, при переезде Windows -> Linux не переехали InnoDB -> MyISAM?
Неактивен
Все таблицы InnoDB.
Если проблема с блокировками:
1. Почему он не пишет типа Loking Table? у меня есть запрос, который личит и пишет и у всех других процессах типа таблица заблокированна пишет.
2. Если он уже делает Sending, то значит типа он уже данные получил и посылает???
Неактивен
В 1 вместо личит - лОчит
Почему под виндой таких проблем не было?
Неактивен
Да, sending - это уже посылает. Настройки InnoDB те же, что в винде?
Неактивен
Слева значения в Linux, справа Винда.
auto_increment_increment 1 auto_increment_increment 1
auto_increment_offset 1 auto_increment_offset 1
autocommit ON autocommit ON
automatic_sp_privileges ON automatic_sp_privileges ON
back_log 50 back_log 50
basedir /usr/ basedir D:\MySQL\
big_tables OFF big_tables OFF
binlog_cache_size 32768 binlog_cache_size 32768
binlog_format STATEMENT binlog_format MIXED
bulk_insert_buffer_size 8388608 bulk_insert_buffer_size 8388608
character_set_client utf8 character_set_client utf8
character_set_connection utf8 character_set_connection utf8
character_set_database utf8 character_set_database utf8
character_set_filesystem binary character_set_filesystem binary
character_set_results utf8 character_set_results utf8
character_set_server utf8 character_set_server utf8
character_set_system utf8 character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/ character_sets_dir D:\MySQL\share\charsets\
collation_connection utf8_general_ci collation_connection utf8_general_ci
collation_database utf8_general_ci collation_database utf8_general_ci
collation_server utf8_general_ci collation_server utf8_general_ci
completion_type 0 completion_type 0
concurrent_insert 1 concurrent_insert 1
connect_timeout 10 connect_timeout 5
datadir /var/lib/mysql/ datadir D:\MySQL\Data\
date_format %Y-%m-%d date_format %Y-%m-%d
datetime_format %Y-%m-%d %H:%i:%s datetime_format %Y-%m-%d %H:%i:%s
default_week_format 0 default_week_format 0
delay_key_write ON delay_key_write ON
delayed_insert_limit 100 delayed_insert_limit 100
delayed_insert_timeout 300 delayed_insert_timeout 300
delayed_queue_size 1000 delayed_queue_size 1000
div_precision_increment 4 div_precision_increment 4
engine_condition_pushdown ON engine_condition_pushdown ON
error_count 0 error_count 0
event_scheduler OFF event_scheduler OFF
expire_logs_days 10 expire_logs_days 0
flush OFF flush OFF
flush_time 0 flush_time 1800
foreign_key_checks ON foreign_key_checks ON
ft_boolean_syntax + -><()~*:""&| ft_boolean_syntax + -><()~*:""&|
ft_max_word_len 84 ft_max_word_len 84
ft_min_word_len 4 ft_min_word_len 4
ft_query_expansion_limit 20 ft_query_expansion_limit 20
ft_stopword_file (built-in) ft_stopword_file (built-in)
general_log OFF general_log OFF
general_log_file /var/run/mysqld/mysqld.log general_log_file D:\MySQL\Data\Betta.log
group_concat_max_len 1024 group_concat_max_len 1024
have_community_features YES
have_compress YES have_compress YES
have_crypt YES have_crypt NO
have_csv YES have_csv YES
have_dynamic_loading YES have_dynamic_loading YES
have_geometry YES have_geometry YES
have_innodb YES have_innodb YES
have_ndbcluster NO have_ndbcluster NO
have_openssl DISABLED have_openssl DISABLED
have_partitioning YES have_partitioning YES
have_query_cache YES have_query_cache YES
have_rtree_keys YES have_rtree_keys YES
have_ssl DISABLED have_ssl DISABLED
have_symlink YES have_symlink YES
hostname lin-mysql-1 hostname Betta
identity 0 identity 0
init_connect init_connect
init_file init_file
init_slave init_slave
innodb_adaptive_hash_index ON
innodb_additional_mem_pool_size 5242880 innodb_additional_mem_pool_size 5242880
innodb_autoextend_increment 8 innodb_autoextend_increment 8
innodb_autoinc_lock_mode 1 innodb_autoinc_lock_mode 1
innodb_buffer_pool_size 2147483648 innodb_buffer_pool_size 681574400
innodb_checksums ON innodb_checksums ON
innodb_commit_concurrency 0 innodb_commit_concurrency 0
innodb_concurrency_tickets 500 innodb_concurrency_tickets 500
innodb_data_file_path ibdata1:10M:autoextend innodb_data_file_path ibdata1:10M:autoextend
innodb_data_home_dir innodb_data_home_dir
innodb_doublewrite ON innodb_doublewrite ON
innodb_fast_shutdown 1 innodb_fast_shutdown 1
innodb_file_io_threads 4 innodb_file_io_threads 9
innodb_file_per_table ON innodb_file_per_table ON
innodb_flush_log_at_trx_commit 0 innodb_flush_log_at_trx_commit 0
innodb_flush_method innodb_flush_method
innodb_force_recovery 0 innodb_force_recovery 0
innodb_lock_wait_timeout 50 innodb_lock_wait_timeout 50
innodb_locks_unsafe_for_binlog OFF innodb_locks_unsafe_for_binlog OFF
innodb_log_buffer_size 1048576 (5M) innodb_log_buffer_size 4194304
innodb_log_file_size 5242880 innodb_log_file_size 45088768
innodb_log_files_in_group 2 innodb_log_files_in_group 2
innodb_log_group_home_dir ./ innodb_log_group_home_dir .\
innodb_max_dirty_pages_pct 90 innodb_max_dirty_pages_pct 90
innodb_max_purge_lag 0 innodb_max_purge_lag 0
innodb_mirrored_log_groups 1 innodb_mirrored_log_groups 1
innodb_open_files 300 innodb_open_files 300
innodb_rollback_on_timeout OFF innodb_rollback_on_timeout OFF
innodb_support_xa ON innodb_support_xa ON
innodb_sync_spin_loops 20 innodb_sync_spin_loops 20
innodb_table_locks ON innodb_table_locks ON
innodb_thread_concurrency 8 innodb_thread_concurrency 10
innodb_thread_sleep_delay 10000 innodb_thread_sleep_delay 10000
insert_id 0 insert_id 0
interactive_timeout 28800 interactive_timeout 28800
join_buffer_size 4194304 join_buffer_size 131072
keep_files_on_create OFF keep_files_on_create OFF
key_buffer_size 104857600 key_buffer_size 73400320
key_cache_age_threshold 300 key_cache_age_threshold 300
key_cache_block_size 1024 key_cache_block_size 1024
key_cache_division_limit 100 key_cache_division_limit 100
language /usr/share/mysql/english/ language D:\MySQL\share\english\
large_files_support ON large_files_support ON
large_page_size 0 large_page_size 0
large_pages OFF large_pages OFF
last_insert_id 0 last_insert_id 0
lc_time_names en_US lc_time_names en_US
license GPL license GPL
local_infile ON local_infile ON
locked_in_memory OFF log OFF
log OFF log_bin OFF
log_bin OFF log_bin_trust_function_creators OFF
log_bin_trust_function_creators OFF log_bin_trust_routine_creators OFF
log_bin_trust_routine_creators OFF
log_error /var/lib/mysql/lin-mysql-1.err log_error D:\MySQL\err.log
log_output FILE log_output TABLE
log_queries_not_using_indexes OFF log_queries_not_using_indexes OFF
log_slave_updates OFF log_slave_updates OFF
log_slow_queries OFF log_slow_queries ON
log_warnings 1 log_warnings 1
long_query_time 10.000000 long_query_time 20.000000
low_priority_updates OFF low_priority_updates OFF
lower_case_file_system OFF lower_case_file_system ON
lower_case_table_names 1 lower_case_table_names 1
max_allowed_packet 20971520 max_allowed_packet 31456256
max_binlog_cache_size 1,84E+019 max_binlog_cache_size 4294967295
max_binlog_size 104857600 (900M) max_binlog_size 1073741824
max_connect_errors 10 max_connect_errors 10
max_connections 100 max_connections 70
max_delayed_threads 20 max_delayed_threads 20
max_error_count 64 max_error_count 64
max_heap_table_size 16777216 max_heap_table_size 16777216
max_insert_delayed_threads 20 max_insert_delayed_threads 20
max_join_size 1,84E+019 max_join_size 4294967295
max_length_for_sort_data 1024 max_length_for_sort_data 1024
max_prepared_stmt_count 16382 max_prepared_stmt_count 16382
max_relay_log_size 0 max_relay_log_size 0
max_seeks_for_key 1,84E+019 max_seeks_for_key 4294967295
max_sort_length 1024 max_sort_length 1024
max_sp_recursion_depth 0 max_sp_recursion_depth 0
max_tmp_tables 128 max_tmp_tables 32
max_user_connections 0 max_user_connections 0
max_write_lock_count 1,84E+019 max_write_lock_count 4294967295
min_examined_row_limit 0 min_examined_row_limit 0
multi_range_count 256 multi_range_count 256
myisam_data_pointer_size 6 myisam_data_pointer_size 6
myisam_max_sort_file_size 9,22E+018 myisam_max_sort_file_size 107374182400
myisam_recover_options OFF myisam_recover_options OFF
myisam_repair_threads 1 myisam_repair_threads 1
myisam_sort_buffer_size 8388608 myisam_sort_buffer_size 17825792
myisam_stats_method nulls_unequal myisam_stats_method nulls_unequal
myisam_use_mmap OFF myisam_use_mmap OFF
ndb_autoincrement_prefetch_sz 1
ndb_cache_check_time 0
ndb_connectstring
ndb_extra_logging 0
ndb_force_send ON
ndb_index_stat_cache_entries 32
ndb_index_stat_enable OFF
ndb_index_stat_update_freq 20
ndb_report_thresh_binlog_epoch_slip 3
ndb_report_thresh_binlog_mem_usage 10
ndb_use_copying_alter_table OFF
ndb_use_exact_count ON
ndb_use_transactions ON named_pipe OFF
net_buffer_length 16384 net_buffer_length 16384
net_read_timeout 30 net_read_timeout 30
net_retry_count 10 net_retry_count 10
net_write_timeout 60 net_write_timeout 60
new OFF new OFF
old OFF old OFF
old_alter_table OFF old_alter_table OFF
old_passwords ON old_passwords OFF
open_files_limit 2110 open_files_limit 2048
optimizer_prune_level 1 optimizer_prune_level 1
optimizer_search_depth 62 optimizer_search_depth 62
pid_file /var/run/mysqld/mysqld.pid pid_file D:\MySQL\Data\Betta.pid
plugin_dir /usr/lib/mysql/plugin plugin_dir D:\MySQL\lib/
port 3307 port 3306
preload_buffer_size 32768 preload_buffer_size 32768
profiling OFF
profiling_history_size 15
protocol_version 10 protocol_version 10
pseudo_thread_id 0 pseudo_thread_id 0
query_alloc_block_size 8192 query_alloc_block_size 8192
query_cache_limit 1048576 query_cache_limit 1048576
query_cache_min_res_unit 4096 query_cache_min_res_unit 4096
query_cache_size 6291456 query_cache_size 5242880
query_cache_type DEMAND query_cache_type DEMAND
query_cache_wlock_invalidate OFF query_cache_wlock_invalidate OFF
query_prealloc_size 8192 query_prealloc_size 8192
rand_seed1 rand_seed1
rand_seed2 rand_seed2
range_alloc_block_size 4096 range_alloc_block_size 2048
read_buffer_size 5242880 read_buffer_size 3141632
read_only OFF read_only OFF
read_rnd_buffer_size 3145728 read_rnd_buffer_size 3141632
relay_log
relay_log_index
relay_log_info_file relay-log.info
relay_log_purge ON relay_log_purge ON
relay_log_space_limit 0 relay_log_space_limit 0
report_host
report_password
report_port 3306
report_user
rpl_recovery_rank 0 rpl_recovery_rank 0
secure_auth OFF secure_auth OFF
secure_file_priv secure_file_priv
server_id 0 server_id 0
shared_memory OFF
shared_memory_base_name MYSQL
skip_external_locking ON skip_external_locking ON
skip_networking OFF skip_networking OFF
skip_show_database OFF skip_show_database OFF
slave_compressed_protocol OFF slave_compressed_protocol OFF
slave_exec_mode STRICT
slave_load_tmpdir /tmp slave_load_tmpdir C:\WINDOWS\TEMP
slave_net_timeout 3600 slave_net_timeout 3600
slave_skip_errors OFF slave_skip_errors OFF
slave_transaction_retries 10 slave_transaction_retries 10
slow_launch_time 2 slow_launch_time 2
slow_query_log OFF slow_query_log ON
slow_query_log_file /var/run/mysqld/mysqld-slow.log slow_query_log_file D:/MySQL/slow.log
socket /var/run/mysqld/mysqld.sock
sort_buffer_size 2097144 sort_buffer_size 2097144
sql_auto_is_null ON sql_auto_is_null ON
sql_big_selects ON sql_big_selects ON
sql_big_tables OFF sql_big_tables OFF
sql_buffer_result OFF sql_buffer_result OFF
sql_log_bin ON sql_log_bin ON
sql_log_off OFF sql_log_off OFF
sql_log_update ON sql_log_update ON
sql_low_priority_updates OFF sql_low_priority_updates OFF
sql_max_join_size 1,84E+019 sql_max_join_size 4294967295
sql_mode sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_notes ON sql_notes ON
sql_quote_show_create ON sql_quote_show_create ON
sql_safe_updates OFF sql_safe_updates OFF
sql_select_limit 1,84E+019 sql_select_limit 4294967295
sql_slave_skip_counter sql_slave_skip_counter
sql_warnings OFF sql_warnings OFF
ssl_ca ssl_ca
ssl_capath ssl_capath
ssl_cert ssl_cert
ssl_cipher ssl_cipher
ssl_key ssl_key
storage_engine InnoDB storage_engine InnoDB
sync_binlog 0 sync_binlog 0
sync_frm ON sync_frm ON
system_time_zone MSK system_time_zone
table_definition_cache 256 table_definition_cache 128
table_lock_wait_timeout 50 table_lock_wait_timeout 50
table_open_cache 1000 table_open_cache 984
table_type InnoDB table_type InnoDB
thread_cache_size 256 thread_cache_size 256
thread_handling one-thread-per-connection thread_handling one-thread-per-connection
thread_stack 540672 thread_stack 196608
time_format %H:%i:%s time_format %H:%i:%s
time_zone SYSTEM time_zone SYSTEM
timed_mutexes OFF timed_mutexes OFF
timestamp 1229405334 timestamp 1229405351
tmp_table_size 104857600 tmp_table_size 104857600
tmpdir /tmp tmpdir C:\WINDOWS\TEMP
transaction_alloc_block_size 8192 transaction_alloc_block_size 8192
transaction_prealloc_size 4096 transaction_prealloc_size 4096
tx_isolation REPEATABLE-READ tx_isolation REPEATABLE-READ
unique_checks ON unique_checks ON
updatable_views_with_limit YES updatable_views_with_limit YES
version 5.1.29-rc-1 version 5.1.22-rc-community-log
version_comment (Debian) version_comment MySQL Community Server (GPL)
version_compile_machine x86_64 version_compile_machine ia32
version_compile_os debian-linux-gnu version_compile_os Win32
wait_timeout 28800 wait_timeout 86000
warning_count 0 warning_count 1
Неактивен
А кто проставляет значения в скобках (к тому же не правильные)?
innodb_log_buffer_size 1048576 (5M)
Пока что смущает мегабайтный log_buffer_size (в виндоус, кстати, было больше) и двухгигабайтный
innodb_buffer_pool. Linux 32 бита или 64?
Неактивен
Подозрительно мал innodb_log_file_size, но не знаю как его поменять, пишу в my.cfg, при рестарте пишет ошибку, может не в том разделе пишу?
Неактивен
Linux 64 битный, там вроде написано в параметрах, в скобках - это что удалось поменять в последнее время, так что в скобках существующие значения.
Неактивен
innodb_log_file_size можно менять только при создании файлов innodb, после создания - уже нельзя.
Если хотите увеличить размер логфайлов, нужно корректно остановить сервер (чтобы все транзакции
применились), после этого можно переместить ib_logfile* из каталога данных, установить новый размер
файлов и запустить сервер. Он должен запуститься и создать новые файлики.
Что касается Вашей проблемы, то боюсь, что надо смотреть на конкретные запросы и почему такое
странное выполнение. В настройках кроме маленького размера лога innodb (и буфера над ним), пожалуй,
все хорошо.
Неактивен
Проблема вроде найдена,осталось найти её решение. Нашли ещё пару запросов, которые долго выполняются и нашли из-за чего. Всё дело в ORDER BY DESC именно в DESC. Т.е. когда комментируем DESC всё работает на ура. Что это баг или в каком-то параметре дело? Версия 5.1.29-rc-1.
Неактивен
А в windows тот же запрос был?
rc - не стабильная версия, имеет смысл брать стабильную.
Неактивен
В винде запрос тот же. Последняя стабильная версия 5.0, а мы используем функции которые в 5.1.
Вариант 1: попробую увеличить sort_buffer_size, не факт что поможет.
Вариант 2: вышел вроде релиз 5.1.30, тока в этом ли дело? и когда он будет под Debian?
вечером попробую Вариант 1, очень хочется верить, что поможет.
Неактивен
sort buffer size не поможет. Дело в индексе. Индекс может использоваться и в обратном порядке (DESC),
но только в случае, когда все его поля используются в обратном порядке (т.е. ORDER BY a DESC, b DESC, ...).
Я не исключаю, что в 5.1 могут быть баги, но что делать
Что касается Debian, то всегда есть по крайней мере 2 варианта:
1. noinst
2. пакетики
Неактивен
sort buffer size действительно не помог, обновили сервер до 5.1.30-2 - не помогло. Высылаю один из проблемных запросов:
SELECT
CAST(f_sa.dogovor AS CHAR(15)) AS N_LC,
CAST(CONCAT_WS(' ',abn.`fam`,abn.`name`,abn.`sname`) AS CHAR(50)) AS FIO,
CAST(CONCAT(IFNULL(f_sc_3.NAME_R, ''), 'д.', `f_sa`.`DOM`,If(`f_sa`.`korp`Is Null,"",concat_ws(' ',",корп ",`f_sa`.`korp`)),If((`f_sa`.`kv`)Is Null,"",
concat_ws('',", кв.",`f_sa`.`kv`))) AS CHAR(100)) AS Adress,
f_sa.BALANCE AS `Sum`,
CAST(
(SELECT CONVERT(f_er.reading USING cp1251) FROM f_er WHERE f_er.KEY_UM = (SELECT f_um.`key` FROM f_um WHERE f_um.key_ea = f_ea.`key`
AND ((ifnull(f_UM.STORNO,0)=0) OR F_UM.`type` = 5)
ПРОБЛЕМА ЗДЕСЬ ORDER BY DPG DESC LIMIT 1) LIMIT 1)
AS UNSIGNED) AS pokaz
FROM f_sa
INNER JOIN f_ea ON f_sa.`KEY` = f_ea.KEY_SA AND (F_EA.DATA_END Is Null)
INNER JOIN t_abonents abn ON f_sa.KEY_A = abn.`KEY`
LEFT JOIN f_sc AS f_SC_3 ON (f_sa.ULICA_F_SC = f_sc_3.UNIQ)
WHERE (F_SA.DATA_END Is Null) AND (IFNULL(F_SA.vugr,0) = 0) AND
EXISTS(select `key` from t_Tarif where t_Tarif.key_ea = f_ea.`key` and t_Tarif.nom <> 1 and (t_Tarif.dataend IS NULL)) = false
Ключи f_um.dpo dpg есть.
Если ставим например limit 100 - запрос выполняется ~70сек.
Закомментируем проблемный DESC и запрос (о чудо) выполняется 0.8 сек.
Если подзапрос выполнять отдельно
(SELECT CONVERT(f_er.reading USING cp1251) FROM f_er WHERE f_er.KEY_UM = (SELECT f_um.`key` FROM f_um WHERE f_um.key_ea = f_ea.`key`
AND ((ifnull(f_UM.STORNO,0)=0) OR F_UM.`type` = 5) ORDER BY DPG DESC LIMIT 1) LIMIT 1)
и вместо f_ea.`key` подставлять ключики (по одному), то выполняется шустро никаких подозрений не вызывает. Такое ощущение что он данный подзапрос в самом запросе выполняет не для каждого ключа 1 раз, а для каждого ключа 100 раз (limit 100)??? или не использует ключ??? не понятно.
Неактивен
Короче сделал функцию (возвращает значение по ключу) и вызываю её вместо подзапроса, всё работает на ура, тьфу тьфу тьфу.
Но такие странности конечно млин. Вместо разработки программы занимаешься устранением различных косяков работы мускула.
Неактивен
Неактивен
Спасибо за разъяснения.
Так я не понял как нужно писать, чтоб использовал индекс DPG?
Про ifnull конечно интересно, имеется ввиду не использование индекса storno?
Неактивен
К сожалению, не знаю, какие индексы есть на ваших табличках
При выполнении запроса для каждой таблицы используется не более одного ключа. Причем
он используется как для фильтрации данных, так и для сортировки. Т.е. для запроса вида
SELECT ... FROM ... WHERE field1 = value1 AND field2 = value2 ORDER BY field3
оптимальным ключом будет ключ на (field1, field2, field3). Ключ на (field3) будет бесполезным,
т.к. данные сначала надо отфильтровать => будет временная табличка без ключа.
Неактивен