Страницы, управляемые базой данных, очень медленные при первой загрузке; Зачем? Apache+PHP

Один из сайтов нашей компании Apache/PHP/MySQL перемещается на новый сервер. Он еще не переведен в производство, так что есть только два пользователя или около того. Тем не менее, загрузка страницы с использованием базы данных может занять несколько секунд.

Например: 13,8 с при первой загрузке страницы и 0,01-0,02 с при последующей загрузке страницы. Это на странице с 30 запросами.

Я полагаю, что задействован какой-то кэш MySQL, но моя главная проблема: почему начальная загрузка настолько медленная? Можно ли что-нибудь из этого диагностировать? В частности, в выводе MySQL SHOW STATUS есть некоторые большие цифры, которые меня беспокоят.

верхний вывод:

top - 12:22:33 up 163 days, 22:45,  7 users,  load average: 0.09, 0.16, 0.29
Tasks: 960 total,   1 running, 959 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.7%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1025492k total,   700924k used,   324568k free,    21132k buffers
Swap:  1044476k total,   538772k used,   505704k free,   114796k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                      
21571 anna      20   0  3356 1676  852 R    2  0.2   0:00.18 top                                                                                           
 4903 anna      20   0  6176 1824  628 S    0  0.2   0:02.94 screen                                                                                        
    1 root      20   0  3312  688  404 S    0  0.1   1:00.89 init                                                                                          
    2 root      20   0     0    0    0 S    0  0.0   0:00.19 kthreadd                                                                                      
    3 root      20   0     0    0    0 S    0  0.0   0:46.33 ksoftirqd/0                                                                                   
    6 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/0                                                                                   
    7 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/1                                                                                   
    9 root      20   0     0    0    0 S    0  0.0   1:49.59 ksoftirqd/1                                                                                   
   11 root       0 -20     0    0    0 S    0  0.0   0:00.00 cpuset         

MySQL ПОКАЗАТЬ СТАТУС

Variable_name   Value
Aborted_clients 1
Aborted_connects    19
Binlog_cache_disk_use   0
Binlog_cache_use    0
Bytes_received  128
Bytes_sent  163
Compression OFF
Connections 160078
Created_tmp_disk_tables 0
Created_tmp_files   23
Created_tmp_tables  0
Delayed_errors  0
Delayed_insert_threads  0
Delayed_writes  0
Flush_commands  1
Innodb_buffer_pool_pages_data   505
Innodb_buffer_pool_pages_dirty  0
Innodb_buffer_pool_pages_flushed    1969738
Innodb_buffer_pool_pages_free   1
Innodb_buffer_pool_pages_misc   6
Innodb_buffer_pool_pages_total  512
Innodb_buffer_pool_read_ahead_rnd   27256
Innodb_buffer_pool_read_ahead_seq   59242
Innodb_buffer_pool_read_requests    3503466291
Innodb_buffer_pool_reads    325582
Innodb_buffer_pool_wait_free    0
Innodb_buffer_pool_write_requests   214340468
Innodb_data_fsyncs  521160
Innodb_data_pending_fsyncs  0
Innodb_data_pending_reads   0
Innodb_data_pending_writes  0
Innodb_data_read    1133531136
Innodb_data_reads   478093
Innodb_data_writes  1008163
Innodb_data_written 1610111488
Innodb_dblwr_pages_written  1969738
Innodb_dblwr_writes 103107
Innodb_log_waits    1
Innodb_log_write_requests   27797124
Innodb_log_writes   261768
Innodb_os_log_fsyncs    314984
Innodb_os_log_pending_fsyncs    0
Innodb_os_log_pending_writes    0
Innodb_os_log_written   1461624320
Innodb_page_size    16384
Innodb_pages_created    10456
Innodb_pages_read   1379772
Innodb_pages_written    1969738
Innodb_row_lock_current_waits   0
Innodb_row_lock_time    94041908
Innodb_row_lock_time_avg    1324
Innodb_row_lock_time_max    6885
Innodb_row_lock_waits   71018
Innodb_rows_deleted 525
Innodb_rows_inserted    368856
Innodb_rows_read    1557304555
Innodb_rows_updated 104987256
Key_blocks_not_flushed  0
Key_blocks_unused   14495
Key_blocks_used 4
Key_read_requests   52709
Key_reads   15
Key_write_requests  671
Key_writes  94
Last_query_cost 0.000000
Max_used_connections    7
Not_flushed_delayed_rows    0
Open_files  16
Open_streams    0
Open_table_definitions  187
Open_tables 64
Opened_files    582769
Opened_table_definitions    0
Opened_tables   0
Prepared_stmt_count 0
Qcache_free_blocks  1023
Qcache_free_memory  11753872
Qcache_hits 12352457
Qcache_inserts  107355
Qcache_lowmem_prunes    0
Qcache_not_cached   10119746
Qcache_queries_in_cache 2750
Qcache_total_blocks 6655
Queries 23924377
Questions   2
Rpl_status  NULL
Select_full_join    0
Select_full_range_join  0
Select_range    0
Select_range_check  0
Select_scan 0
Slave_open_temp_tables  0
Slave_retried_transactions  0
Slave_running   OFF
Slow_launch_threads 0
Slow_queries    0
Sort_merge_passes   0
Sort_range  0
Sort_rows   0
Sort_scan   0
Ssl_accept_renegotiates 0
Ssl_accepts 0
Ssl_callback_cache_hits 0
Ssl_cipher  
Ssl_cipher_list 
Ssl_client_connects 0
Ssl_connect_renegotiates    0
Ssl_ctx_verify_depth    0
Ssl_ctx_verify_mode 0
Ssl_default_timeout 0
Ssl_finished_accepts    0
Ssl_finished_connects   0
Ssl_session_cache_hits  0
Ssl_session_cache_misses    0
Ssl_session_cache_mode  NONE
Ssl_session_cache_overflows 0
Ssl_session_cache_size  0
Ssl_session_cache_timeouts  0
Ssl_sessions_reused 0
Ssl_used_session_cache_entries  0
Ssl_verify_depth    0
Ssl_verify_mode 0
Ssl_version 
Table_locks_immediate   18960035
Table_locks_waited  520
Tc_log_max_pages_used   0
Tc_log_page_size    0
Tc_log_page_waits   0
Threads_cached  6
Threads_connected   1
Threads_created 7
Threads_running 1
Uptime  13580879
Uptime_since_flush_status   13580879

Если никто не может увидеть что-то очевидное оттуда, я полагаю, мне придется начать синхронизировать отдельные запросы и части кода.

Это не происходит на страницах, которые используют несколько запросов к базе данных, поэтому я исключаю проблемы с сетью.

1 ответ

Решение

Первое, что нужно проверить, это то, что разрешение имен отключено, и аутентификация выполняется на основе IP-адреса, а не имени. Это может привести к большой задержке для операций запроса.

Да, выполнение запроса непосредственно к данным на диске намного, намного медленнее, чем выборка из кеша запросов - большая часть ваших запросов обрабатывается из кеша запросов, но его увеличение не приведет к огромным потерям. влияние.

Вопрос о том, является ли проблема производительности вашего запроса, будет очевиден из вашего медленного журнала запросов - если вы используете что-то меньше 5.1, обновите свою БД, чтобы вы могли установить медленный порог запроса в 0 секунд (то есть все регистрируется) и начать использовать mysqldumpslow проанализировать данные.

Похоже, что ваши таблицы находятся в innodb - глядя на то, что вы опубликовали здесь, есть проблемы с вашей конфигурацией. Предполагая, что это выделенный сервер БД, а MyISAM не используется, вам нужен гораздо больший innodb_buffer_pool_size (не показанный в цитируемых метриках?)

Другие вопросы по тегам