|  |   | 
Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую всех на этом форуме!
Сразу к делу:
Проблема - при выборке из таблицы каталога с примерно 60000 наименований, запрос "пробегает" по таблице каталога несколько раз. Скорость запросов варьируется, как правило ищатся артикулы от 6 до 25 буквенно-символьных комбинаций. Средняя величина ожидания пользователя 8 -10 секунд на один запрос в поисковую систему. Каталог не имеет изображений, вывод данных пользователю представляется в виде таблицы, где фиксированное кол-во колонок - 7, и найденные соответствия поисковому запросу построчно. 
Очень надо найти узкое место, для этого прошу вашей оценки. Основной вопрос - есть ли возможность перенастроить буферы и конфигурацию MySQL в целом, 
либо необходимо расширить возможности железа, либо попытаться переписать запросы (позволит ли такое Битрикс?) чтобы сократить время оиждания?
Статические страницы отрабатывают в среднем за 0,02 сек. Но как мне объяснили разработчики, в БД в таблице каталога нет ни индексов, и она не кэшируется.
Очень хочется максимально сократить время ожидания (до <1 секунды), я как админ, могу лишь предложить другое железо, память проц все дела. 
В MySQL указано значение max_connections равным 151, нужно ли столько при посещаемости 3-5 одновременных пользователей на сайте, подозреваю это значение нежно снизить?
К великому сожалению нет возможности проконсультироваться с грамотными DBA, поэтому пишу сюда. Спасибо за ваши ответы!
Хостинг VPS - 4ГБ RAM
Apache, MySQL 5.1.73 (InnoDB)
CMS - 1С-Битрикс: Управление сайтом 14.0.10 - генерирует запросы SQL сама.
Файл my.cnf - который применен сейчас. 
[mysqld]
local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
transaction-isolation = READ-COMMITTED
# Cache parameters
query_cache_size = 64M
table_open_cache = 4096
thread_cache_size = 32
key_buffer_size = 64M
sort_buffer_size = 2M
read_buffer_size = 8M
thread_stack = 256K
join_buffer_size = 2M
# Parameters for temporary tables
tmpdir = /tmp
max_heap_table_size    = 32M
tmp_table_size = 32M
# InnoDB parameters
innodb_buffer_pool_size    = 768M
innodb_additional_mem_pool_size=128M
innodb_file_io_threads=8
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 192M
innodb_flush_method = O_DIRECT
innodb_log_buffer_size=16M
innodb_thread_concurrency=8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
innodb_buffer_pool_size    = 780M
innodb_additional_mem_pool_size=32M
innodb_file_io_threads=8
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 64M
innodb_flush_method = O_DIRECT
innodb_log_buffer_size=16M
innodb_thread_concurrency=8
Пример запроса, который отрабатывает за 19 секунд (просьба сильно не пинать):
Отредактированно Punkt (04.03.2014 11:52:33)
Неактивен

Покажите определения таблиц входящих в этот запрос:
show create table b_iblock;
show create table b_lang;
...
и план запроса, т.е. 
explain extended ваш запрос \G
show warnings \G
Запрос содержит независимый IN подзапрос, но в вашей версии он будет выполняться для каждой строки внешнего запроса. Попробуйте выполнить запрос на более новой версии (MySQL 5.6 или MariaDB 5.3 и выше)
Неактивен
vasya написал:
Покажите определения таблиц входящих в этот запрос:
show create table b_iblock;
show create table b_lang;
...
Из всего FROM где есть INNER JOIN и LEFT JOIN?
vasya написал:
и план запроса, т.е.
explain extended ваш запрос \G
show warnings \G
Это две разные комманды, свой запрос надо вставить только в explain или в show тоже?
Неактивен
CREATE TABLE `b_iblock` (  `ID` int(11) NOT NULL AUTO_INCREMENT,  `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  `IBLOCK_TYPE_ID` varchar(50) COLLATE utf8_unicode_ci NOT NULL,  `LID` char(2) COLLATE utf8_unicode_ci NOT NULL,  `CODE` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,  `NAME` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  `ACTIVE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',  `SORT` int(11) NOT NULL DEFAULT '500',  `LIST_PAGE_URL` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `DETAIL_PAGE_URL` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `SECTION_PAGE_URL` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `PICTURE` int(18) DEFAULT NULL,  `DESCRIPTION` text COLLATE utf8_unicode_ci,  `DESCRIPTION_TYPE` char(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'text',  `RSS_TTL` int(11) NOT NULL DEFAULT '24',  `RSS_ACTIVE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',  `RSS_FILE_ACTIVE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `RSS_FILE_LIMIT` int(11) DEFAULT NULL,  `RSS_FILE_DAYS` int(11) DEFAULT NULL,  `RSS_YANDEX_ACTIVE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `XML_ID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `TMP_ID` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,  `INDEX_ELEMENT` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',  `INDEX_SECTION` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `WORKFLOW` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',  `BIZPROC` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `SECTION_CHOOSER` char(1) COLLATE utf8_unicode_ci DEFAULT NULL,  `LIST_MODE` char(1) COLLATE utf8_unicode_ci DEFAULT NULL,  `RIGHTS_MODE` char(1) COLLATE utf8_unicode_ci DEFAULT NULL,  `VERSION` int(11) NOT NULL DEFAULT '1',  `LAST_CONV_ELEMENT` int(11) NOT NULL DEFAULT '0',  `SOCNET_GROUP_ID` int(18) DEFAULT NULL,  `EDIT_FILE_BEFORE` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `EDIT_FILE_AFTER` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `SECTIONS_NAME` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,  `SECTION_NAME` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,  `ELEMENTS_NAME` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,  `ELEMENT_NAME` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,  `SECTION_PROPERTY` char(1) COLLATE utf8_unicode_ci DEFAULT NULL,  PRIMARY KEY (`ID`),  KEY `ix_iblock` (`IBLOCK_TYPE_ID`,`LID`,`ACTIVE`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE `b_lang` (  `LID` char(2) COLLATE utf8_unicode_ci NOT NULL,  `SORT` int(18) NOT NULL DEFAULT '100',  `DEF` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `ACTIVE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',  `NAME` varchar(50) COLLATE utf8_unicode_ci NOT NULL,  `DIR` varchar(50) COLLATE utf8_unicode_ci NOT NULL,  `FORMAT_DATE` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,  `FORMAT_DATETIME` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,  `WEEK_START` int(11) DEFAULT NULL,  `CHARSET` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `LANGUAGE_ID` char(2) COLLATE utf8_unicode_ci NOT NULL,  `DOC_ROOT` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `DOMAIN_LIMITED` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `SERVER_NAME` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `SITE_NAME` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `EMAIL` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `FORMAT_NAME` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `CULTURE_ID` int(11) DEFAULT NULL,  PRIMARY KEY (`LID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Неактивен
phpmyadmin
Show warnings показал следующее: 
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT BE.ID as ID, BE.IBLOCK_ID as IBLOCK_ID, BE.CODE as CODE, ' at line 2
Неактивен
phpmyadmin
Show warnings показал следующее: 
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '), CAT_IB.VAT_ID, CAT_PR.VAT_ID ) WHERE 1 = 1 ' at line 166
Неактивен

Punkt написал:
vasya написал:
Покажите определения таблиц входящих в этот запрос:
show create table b_iblock;
show create table b_lang;
...Из всего FROM где есть INNER JOIN и LEFT JOIN?
Да, для всех таблиц.
Punkt написал:
vasya написал:
и план запроса, т.е.
explain extended ваш запрос \G
show warnings \GЭто две разные комманды, свой запрос надо вставить только в explain или в show тоже?
Только в explain.
Неактивен
CREATE TABLE `b_iblock_element` (  `ID` int(11) NOT NULL AUTO_INCREMENT,  `TIMESTAMP_X` datetime DEFAULT NULL,  `MODIFIED_BY` int(18) DEFAULT NULL,  `DATE_CREATE` datetime DEFAULT NULL,  `CREATED_BY` int(18) DEFAULT NULL,  `IBLOCK_ID` int(11) NOT NULL DEFAULT '0',  `IBLOCK_SECTION_ID` int(11) DEFAULT NULL,  `ACTIVE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',  `ACTIVE_FROM` datetime DEFAULT NULL,  `ACTIVE_TO` datetime DEFAULT NULL,  `SORT` int(11) NOT NULL DEFAULT '500',  `NAME` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  `PREVIEW_PICTURE` int(18) DEFAULT NULL,  `PREVIEW_TEXT` text COLLATE utf8_unicode_ci,  `PREVIEW_TEXT_TYPE` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'text',  `DETAIL_PICTURE` int(18) DEFAULT NULL,  `DETAIL_TEXT` longtext COLLATE utf8_unicode_ci,  `DETAIL_TEXT_TYPE` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'text',  `SEARCHABLE_CONTENT` text COLLATE utf8_unicode_ci,  `WF_STATUS_ID` int(18) DEFAULT '1',  `WF_PARENT_ELEMENT_ID` int(11) DEFAULT NULL,  `WF_NEW` char(1) COLLATE utf8_unicode_ci DEFAULT NULL,  `WF_LOCKED_BY` int(18) DEFAULT NULL,  `WF_DATE_LOCK` datetime DEFAULT NULL,  `WF_COMMENTS` text COLLATE utf8_unicode_ci,  `IN_SECTIONS` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `XML_ID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `CODE` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `TAGS` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `TMP_ID` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,  `WF_LAST_HISTORY_ID` int(11) DEFAULT NULL,  `SHOW_COUNTER` int(18) DEFAULT NULL,  `SHOW_COUNTER_START` datetime DEFAULT NULL,  PRIMARY KEY (`ID`),  KEY `ix_iblock_element_1` (`IBLOCK_ID`,`IBLOCK_SECTION_ID`),  KEY `ix_iblock_element_4` (`IBLOCK_ID`,`XML_ID`,`WF_PARENT_ELEMENT_ID`),  KEY `ix_iblock_element_3` (`WF_PARENT_ELEMENT_ID`),  KEY `ix_iblock_element_code` (`IBLOCK_ID`,`CODE`)) ENGINE=InnoDB AUTO_INCREMENT=118518 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE `b_iblock_property` (  `ID` int(11) NOT NULL AUTO_INCREMENT,  `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  `IBLOCK_ID` int(11) NOT NULL,  `NAME` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  `ACTIVE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',  `SORT` int(11) NOT NULL DEFAULT '500',  `CODE` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,  `DEFAULT_VALUE` text COLLATE utf8_unicode_ci,  `PROPERTY_TYPE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'S',  `ROW_COUNT` int(11) NOT NULL DEFAULT '1',  `COL_COUNT` int(11) NOT NULL DEFAULT '30',  `LIST_TYPE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'L',  `MULTIPLE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `XML_ID` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,  `FILE_TYPE` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,  `MULTIPLE_CNT` int(11) DEFAULT NULL,  `TMP_ID` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,  `LINK_IBLOCK_ID` int(18) DEFAULT NULL,  `WITH_DESCRIPTION` char(1) COLLATE utf8_unicode_ci DEFAULT NULL,  `SEARCHABLE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `FILTRABLE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `IS_REQUIRED` char(1) COLLATE utf8_unicode_ci DEFAULT NULL,  `VERSION` int(11) NOT NULL DEFAULT '1',  `USER_TYPE` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  `USER_TYPE_SETTINGS` text COLLATE utf8_unicode_ci,  `HINT` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  PRIMARY KEY (`ID`),  KEY `ix_iblock_property_1` (`IBLOCK_ID`),  KEY `ix_iblock_property_3` (`LINK_IBLOCK_ID`),  KEY `ix_iblock_property_2` (`CODE`)) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE `b_iblock_element_property` (  `ID` int(11) NOT NULL AUTO_INCREMENT,  `IBLOCK_PROPERTY_ID` int(11) NOT NULL,  `IBLOCK_ELEMENT_ID` int(11) NOT NULL,  `VALUE` text COLLATE utf8_unicode_ci NOT NULL,  `VALUE_TYPE` char(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'text',  `VALUE_ENUM` int(11) DEFAULT NULL,  `VALUE_NUM` decimal(18,4) DEFAULT NULL,  `DESCRIPTION` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  PRIMARY KEY (`ID`),  KEY `ix_iblock_element_property_1` (`IBLOCK_ELEMENT_ID`,`IBLOCK_PROPERTY_ID`),  KEY `ix_iblock_element_property_2` (`IBLOCK_PROPERTY_ID`),  KEY `ix_iblock_element_prop_enum` (`VALUE_ENUM`,`IBLOCK_PROPERTY_ID`),  KEY `ix_iblock_element_prop_num` (`VALUE_NUM`,`IBLOCK_PROPERTY_ID`)) ENGINE=InnoDB AUTO_INCREMENT=8659894 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE `b_catalog_price` (  `ID` int(11) NOT NULL AUTO_INCREMENT,  `PRODUCT_ID` int(11) NOT NULL,  `EXTRA_ID` int(11) DEFAULT NULL,  `CATALOG_GROUP_ID` int(11) NOT NULL,  `PRICE` decimal(18,2) NOT NULL,  `CURRENCY` char(3) COLLATE utf8_unicode_ci NOT NULL,  `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  `QUANTITY_FROM` int(11) DEFAULT NULL,  `QUANTITY_TO` int(11) DEFAULT NULL,  `TMP_ID` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,  PRIMARY KEY (`ID`),  KEY `IXS_CAT_PRICE_PID` (`PRODUCT_ID`,`CATALOG_GROUP_ID`),  KEY `IXS_CAT_PRICE_GID` (`CATALOG_GROUP_ID`)) ENGINE=InnoDB AUTO_INCREMENT=1204531 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE `b_catalog_product` (  `ID` int(11) NOT NULL,  `QUANTITY` double NOT NULL,  `QUANTITY_TRACE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `WEIGHT` double NOT NULL DEFAULT '0',  `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  `PRICE_TYPE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'S',  `RECUR_SCHEME_LENGTH` int(11) DEFAULT NULL,  `RECUR_SCHEME_TYPE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'D',  `TRIAL_PRICE_ID` int(11) DEFAULT NULL,  `WITHOUT_ORDER` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `SELECT_BEST_PRICE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',  `VAT_ID` int(11) DEFAULT '0',  `VAT_INCLUDED` char(1) COLLATE utf8_unicode_ci DEFAULT 'Y',  `TMP_ID` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,  `CAN_BUY_ZERO` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `NEGATIVE_AMOUNT_TRACE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'D',  `BARCODE_MULTI` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `PURCHASING_PRICE` decimal(18,2) DEFAULT NULL,  `PURCHASING_CURRENCY` char(3) COLLATE utf8_unicode_ci DEFAULT NULL,  `QUANTITY_RESERVED` double DEFAULT '0',  `MEASURE` int(11) DEFAULT NULL,  `WIDTH` double DEFAULT NULL,  `LENGTH` double DEFAULT NULL,  `HEIGHT` double DEFAULT NULL,  `SUBSCRIBE` char(1) COLLATE utf8_unicode_ci DEFAULT NULL,  `TYPE` int(11) DEFAULT NULL,  PRIMARY KEY (`ID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE `b_catalog_iblock` (  `IBLOCK_ID` int(11) NOT NULL,  `YANDEX_EXPORT` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `SUBSCRIPTION` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',  `VAT_ID` int(11) DEFAULT '0',  `PRODUCT_IBLOCK_ID` int(11) NOT NULL DEFAULT '0',  `SKU_PROPERTY_ID` int(11) NOT NULL DEFAULT '0',  PRIMARY KEY (`IBLOCK_ID`),  KEY `IXS_CAT_IB_PRODUCT` (`PRODUCT_IBLOCK_ID`),  KEY `IXS_CAT_IB_SKU_PROP` (`SKU_PROPERTY_ID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE `b_catalog_vat` (  `ID` int(11) NOT NULL AUTO_INCREMENT,  `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  `ACTIVE` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',  `C_SORT` int(18) NOT NULL DEFAULT '100',  `NAME` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',  `RATE` decimal(18,2) NOT NULL DEFAULT '0.00',  PRIMARY KEY (`ID`),  KEY `IX_CAT_VAT_ACTIVE` (`ACTIVE`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Неактивен

А план выполнения?
Неактивен
vasya написал:
А план выполнения?
не запускается, ругается на вот этот кусок
Строки 167-173
Отредактированно Punkt (04.03.2014 19:26:42)
Неактивен

А откуда вы сам запрос скопировали? Он синтаксически неверен, там неправильно указаны скобки.
Неактивен
vasya написал:
А откуда вы сам запрос скопировали? Он синтаксически неверен, там неправильно указаны скобки.
Мог ошибиться при форматировании. Запрос копировал из Битрикса, там где отражены медленные запросы к базе. 
Перепроверю и отпишусь.
Неактивен