Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Большое время выполнения (bitrix:news.list) при кол-ве элементов > 20к

00 голосов
7
Добрый день.
Имеется ситуация, на странице размещен компонент bitrix:news.list
Код
<?$APPLICATION->IncludeComponent("bitrix:news.list", "", array(
   "IBLOCK_TYPE" => "materials",
   "IBLOCK_ID" => "7",
   "NEWS_COUNT" => "5",
   "SORT_BY1" => "ACTIVE_FROM",
   "SORT_ORDER1" => "DESC",
   "SORT_BY2" => "ACTIVE_FROM",
   "SORT_ORDER2" => "DESC",
   "FILTER_NAME" => "indexMedianewsFilter",
   "FIELD_CODE" => array(
      0 => "DATE_ACTIVE_FROM",
      1 => "",
   ),
   "PROPERTY_CODE" => array(
      0 => "",
      1 => "",
   ),
   "CHECK_DATES" => "Y",
   "DETAIL_URL" => "#ELEMENT_CODE#.htm",
   "AJAX_MODE" => "N",
   "AJAX_OPTION_SHADOW" => "Y",
   "AJAX_OPTION_JUMP" => "N",
   "AJAX_OPTION_STYLE" => "Y",
   "AJAX_OPTION_HISTORY" => "N",
   "CACHE_TYPE" => "N",
   "CACHE_TIME" => "36000000",
   "CACHE_FILTER" => "Y",
   "CACHE_GROUPS" => "Y",
   "PREVIEW_TRUNCATE_LEN" => "",
   "ACTIVE_DATE_FORMAT" => "d.m.Y",
   "SET_TITLE" => "N",
   "SET_STATUS_404" => "N",
   "INCLUDE_IBLOCK_INTO_CHAIN" => "N",
   "ADD_SECTIONS_CHAIN" => "N",
   "HIDE_LINK_WHEN_NO_DETAIL" => "N",
   "PARENT_SECTION" => "22",
   "PARENT_SECTION_CODE" => "medianews",
   "DISPLAY_TOP_PAGER" => "N",
   "DISPLAY_BOTTOM_PAGER" => "N",
   "PAGER_TITLE" => "Новости",
   "PAGER_SHOW_ALWAYS" => "N",
   "PAGER_TEMPLATE" => "",
   "PAGER_DESC_NUMBERING" => "N",
   "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
   "PAGER_SHOW_ALL" => "N",
   "DISPLAY_DATE" => "N",
   "DISPLAY_NAME" => "Y",
   "DISPLAY_PICTURE" => "N",
   "DISPLAY_PREVIEW_TEXT" => "N",
   "AJAX_OPTION_ADDITIONAL" => ""
   ),
   false,
   array(
   "ACTIVE_COMPONENT" => "Y"
   )
);?>

Количество записей в инфоблоке > 20к, при включении отладки на сайте показывает что
нагрузку дает запрос
Код
SELECT BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID,BE.IBLOCK_SECTION_ID as IBLOCK_SECTION_ID,BE.NAME as NAME,IF(EXTRACT(HOUR_SECOND
FROM
BE.ACTIVE_FROM)>0, DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y')) as ACTIVE_FROM,B.DETAIL_PAGE_URL as DETAIL_PAGE_URL,BE.DETAIL_TEXT as DETAIL_TEXT,BE.DETAIL_TEXT_TYPE as DETAIL_TEXT_TYPE,BE.PREVIEW_TEXT as PREVIEW_TEXT,BE.PREVIEW_TEXT_TYPE as PREVIEW_TEXT_TYPE,BE.PREVIEW_PICTURE as PREVIEW_PICTURE, FPS0.*,L.DIR as LANG_DIR,BE.SORT as SORT,BE.CODE as CODE,BE.XML_ID as EXTERNAL_ID,B.IBLOCK_TYPE_ID as IBLOCK_TYPE_ID,B.CODE as IBLOCK_CODE,B.XML_ID as IBLOCK_EXTERNAL_ID,B.LID as LID
FROM
b_iblock B
INNER JOIN b_lang L ON B.LID=L.LID
INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID
INNER JOIN b_iblock_element_prop_s7 FPS0 ON FPS0.IBLOCK_ELEMENT_ID = BE.ID
INNER JOIN ( SELECT DISTINCT B.ID
FROM
b_iblock B
INNER JOIN b_iblock_site BS ON BS.IBLOCK_ID = B.ID
WHERE
((((BS.SITE_ID='s1')))) AND ((((B.ID = '7')))) ) BB ON BB.ID = BE.IBLOCK_ID
WHERE
1=1 AND ( ((((BE.IBLOCK_ID = '7')))) AND ((((BE.ACTIVE='Y')))) AND (((BE.ACTIVE_TO >= now() OR BE.ACTIVE_TO IS NULL) AND (BE.ACTIVE_FROM <= now() OR BE.ACTIVE_FROM IS NULL))) ) AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)))
ORDER BY
BE.ACTIVE_FROM desc ,BE.SORT asc ,BE.ID desc
LIMIT 2   

Время выполнения 35c.
Свойства инфоблока находятся в отдельной таблице.
Версия битрикса 10.0.1.
Сервер выделенный.

Если включить кеширование то всё ок, работает быстро но большое время первой генерации что неподходит.

Для настройки использовались
http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=3&LESSON_ID=21
http://dev.1c-bitrix.ru/support/faq/11571/

Собсно вопрос, какие могут быть возможные варианты увеличить скорость.
Спасибо.
спросил 01 Авг, 13 от CmexXx (140 баллов)

7 Ответы

00 голосов
Ограничьте в фильтре выборку по дате, к примеру за неделю или месяц
ответил 01 Авг, 13 от Dakost (580 баллов)
00 голосов
Думаю есть ошибка настройки MySQL.
Этот же запрос я выполнил на 100k элементов - получил у себя 0.5 секунды.
Посмотрите /bitrix/admin/perfmon_db_server.php?lang=ru
ответил 30 Сен, 13 от Miso (740 баллов)
00 голосов
Цитата
Maxim Smirnov пишет:
Этот же запрос я выполнил на 100k элементов - получил у себя 0.5 секунды.

А у этих элементов было заполнено поле DETAIL_TEXT? :)
ответил 31 Дек, 13 от Ly (4,580 баллов)
00 голосов
Цитата
ipulse пишет:
Собсно вопрос, какие могут быть возможные варианты увеличить скорость.

Покажите, пожалуйста, результат выполнения запроса
show variables like '%size%'
ответил 16 Апр, 14 от Ly (4,580 баллов)
00 голосов
+---------------------------------+----------------------+
| Variable_name | Value |
+---------------------------------+----------------------+
| binlog_cache_size | 32768 |
| bulk_insert_buffer_size | 8388608 |
| delayed_queue_size | 1000 |
| innodb_additional_mem_pool_size | 16777216 |
| innodb_buffer_pool_size | 268435456 |
| innodb_log_buffer_size | 1048576 |
| innodb_log_file_size | 5242880 |
| join_buffer_size | 1048576 |
| key_buffer_size | 16777216 |
| key_cache_block_size | 1024 |
| large_page_size | 0 |
| max_binlog_cache_size | 4294963200 |
| max_binlog_size | 104857600 |
| max_heap_table_size | 67108864 |
| max_join_size | 18446744073709551615 |
| max_relay_log_size | 0 |
| myisam_data_pointer_size | 6 |
| myisam_max_sort_file_size | 2146435072 |
| myisam_mmap_size | 4294967295 |
| myisam_sort_buffer_size | 8388608 |
| preload_buffer_size | 32768 |
| profiling_history_size | 15 |
| query_alloc_block_size | 8192 |
| query_cache_size | 33554432 |
| query_prealloc_size | 8192 |
| range_alloc_block_size | 4096 |
| read_buffer_size | 131072 |
| read_rnd_buffer_size | 262144 |
| sort_buffer_size | 67108864 |
| sql_max_join_size | 18446744073709551615 |
| thread_cache_size | 32 |
| tmp_table_size | 134217728 |
| transaction_alloc_block_size | 8192 |
| transaction_prealloc_size | 4096 |
+---------------------------------+----------------------+
34 rows in set (0.01 sec)
ответил 10 Авг, 14 от CmexXx (140 баллов)
00 голосов
Попробуйте, действительно, ограничить размер выборки, как предложил Николай Рыжонин.
ответил 14 Дек, 14 от Ly (4,580 баллов)
00 голосов
Цитата
Dmitry Ban пишет:
А у этих элементов было заполнено поле DETAIL_TEXT?


Да на информационных сайтах DETAIL_TEXT оказывает значительное влияние на скорость выборки стандартного news.list, так как приходится вытаскивать значительный объем информации.

Следующим шагом после ограничение выборки может стать создание своего компонента на основе стандартного с отключением выборки ненужных полей.
ответил 05 Апр, 15 от Dakost (580 баллов)

Похожие вопросы

0 голосов
4 ответов
0 голосов
1 ответ
0 голосов
6 ответов
спросил 16 Апр, 13 от Gotenok (200 баллов)
0 голосов
2 ответов
0 голосов
3 ответов