SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.12.2008 10:16:22

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Sending вместо Sorting?

Здравствуйте.
Перешли с винды на Linux, MySQL 5.1. Есть пару больших запросов (джойнится с десяток таблиц, куча критерией). Так вот при запуске на винде в процессах пишет Sorting Data а потом Sending Data (выполняется пару минут). При запуске на Linux пишет сразу Sending Data ??? При этом тоже выполняется быстро если нет пользователей. Если есть нагрузка на серваке в виде юзеров (хотя нагрузка пустяковая), то запрос повисает на смерть (выполняется более 40 минут потом просто убиваю процесс).
Вопрос1: Почему в винде Sorting Data а под Linux сразу Sending Data?
Вопрос2: Почему виснет при подключенных юзверях?
Догадка1: Не может получить нужных доступ к занятой таблице???
Догадка2: Пытается отослать данные на сторону клиента для обработки???

Неактивен

 

#2 23.12.2008 10:26:54

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Sending вместо Sorting?

Если пишет sending - значит, уже отсортировал и посылает данные.

Догадка 1, скорее всего, правильная - просто так пользователи никакой нагрузки не делают - они
работают с этими таблицами => есть блокировки какие-то.

Встречный вопрос - Вы, случаем, при переезде Windows -> Linux не переехали InnoDB -> MyISAM?

Неактивен

 

#3 23.12.2008 10:51:09

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Sending вместо Sorting?

Все таблицы InnoDB.
Если проблема с блокировками:
1. Почему он не пишет типа Loking Table? у меня есть запрос, который личит и пишет и у всех других процессах типа таблица заблокированна пишет.
2. Если он уже делает Sending, то значит типа он уже данные получил и посылает???

Неактивен

 

#4 23.12.2008 10:52:58

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Sending вместо Sorting?

В 1 вместо личит - лОчит smile
Почему под виндой таких проблем не было?

Неактивен

 

#5 23.12.2008 11:00:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Sending вместо Sorting?

Да, sending - это уже посылает. Настройки InnoDB те же, что в винде?

Неактивен

 

#6 23.12.2008 11:10:21

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Sending вместо Sorting?

Слева значения в 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

Неактивен

 

#7 23.12.2008 11:38:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Sending вместо Sorting?

А кто проставляет значения в скобках (к тому же не правильные)?
innodb_log_buffer_size    1048576 (5M)

Пока что смущает мегабайтный log_buffer_size (в виндоус, кстати, было больше) и двухгигабайтный
innodb_buffer_pool. Linux 32 бита или 64?

Неактивен

 

#8 23.12.2008 11:40:11

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Sending вместо Sorting?

Подозрительно мал innodb_log_file_size, но не знаю как его поменять, пишу в my.cfg, при рестарте пишет ошибку, может не в том разделе пишу?

Неактивен

 

#9 23.12.2008 11:42:11

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Sending вместо Sorting?

Linux 64 битный, там вроде написано в параметрах, в скобках - это что удалось поменять в последнее время, так что в скобках существующие значения.

Неактивен

 

#10 23.12.2008 12:02:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Sending вместо Sorting?

innodb_log_file_size можно менять только при создании файлов innodb, после создания - уже нельзя.
Если хотите увеличить размер логфайлов, нужно корректно остановить сервер (чтобы все транзакции
применились), после этого можно переместить ib_logfile* из каталога данных, установить новый размер
файлов и запустить сервер. Он должен запуститься и создать новые файлики.

Что касается Вашей проблемы, то боюсь, что надо смотреть на конкретные запросы и почему такое
странное выполнение. В настройках кроме маленького размера лога innodb (и буфера над ним), пожалуй,
все хорошо.

Неактивен

 

#11 23.12.2008 15:14:08

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Sending вместо Sorting?

Проблема вроде найдена,осталось найти её решение. Нашли ещё пару запросов, которые долго выполняются и нашли из-за чего. Всё дело в ORDER BY DESC именно в DESC. Т.е. когда комментируем DESC всё работает на ура. Что это баг или в каком-то параметре дело? Версия 5.1.29-rc-1.

Неактивен

 

#12 23.12.2008 15:31:40

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Sending вместо Sorting?

А в windows тот же запрос был?
rc - не стабильная версия, имеет смысл брать стабильную.

Неактивен

 

#13 23.12.2008 15:50:46

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Sending вместо Sorting?

В винде запрос тот же. Последняя стабильная версия 5.0, а мы используем функции которые в 5.1.
Вариант 1: попробую увеличить sort_buffer_size, не факт что поможет.
Вариант 2: вышел вроде релиз 5.1.30, тока в этом ли дело? и когда он будет под Debian?
вечером попробую Вариант 1, очень хочется верить, что поможет.

Неактивен

 

#14 23.12.2008 16:16:28

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Sending вместо Sorting?

sort buffer size не поможет. Дело в индексе. Индекс может использоваться и в обратном порядке (DESC),
но только в случае, когда все его поля используются в обратном порядке (т.е. ORDER BY a DESC, b DESC, ...).

Я не исключаю, что в 5.1 могут быть баги, но что делать sad

Что касается Debian, то всегда есть по крайней мере 2 варианта:
1. noinst
2. пакетики

Неактивен

 

#15 24.12.2008 09:18:41

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Sending вместо Sorting?

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)??? или не использует ключ??? не понятно.

Неактивен

 

#16 24.12.2008 10:31:23

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Sending вместо Sorting?

Короче сделал функцию (возвращает значение по ключу) и вызываю её вместо подзапроса, всё работает на ура, тьфу тьфу тьфу.
Но такие странности конечно млин. Вместо разработки программы занимаешься устранением различных косяков работы мускула.

Неактивен

 

#17 24.12.2008 14:59:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Sending вместо Sorting?

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


Вот этот запрос не будет использовать ключик только на на dpg. Никогда. Странно, что у
Вас работало быстро в Windows. Не должно было smile

То, как выполняются запросы, можно смотреть командой EXPLAIN - она покажет индексы,
которые используются при выполнении. Также учтите, что конструкции типа ifnull убивают
возможность использования индекса (т.е. сделать колонку not null default 0 - упростит запрос).

Неактивен

 

#18 25.12.2008 13:32:36

Dimon
Завсегдатай
Зарегистрирован: 06.09.2007
Сообщений: 45

Re: Sending вместо Sorting?

Спасибо за разъяснения.
Так я не понял как нужно писать, чтоб использовал индекс DPG?
Про ifnull конечно интересно, имеется ввиду не использование индекса storno?

Неактивен

 

#19 25.12.2008 13:52:56

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Sending вместо Sorting?

К сожалению, не знаю, какие индексы есть на ваших табличках smile

При выполнении запроса для каждой таблицы используется не более одного ключа. Причем
он используется как для фильтрации данных, так и для сортировки. Т.е. для запроса вида
SELECT ... FROM ... WHERE field1 = value1 AND field2 = value2 ORDER BY field3
оптимальным ключом будет ключ на (field1, field2, field3). Ключ на (field3) будет бесполезным,
т.к. данные сначала надо отфильтровать => будет временная табличка без ключа.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson