Проблемы с производительностью MySQLMySql

Форум по Mysql
Ответить
Anonymous
 Проблемы с производительностью MySQL

Сообщение Anonymous »

У нас есть некоторые сложные проблемы с производительностью, которые кажется нам, что они не должны существовать, но мы не видим никакого способа их решения. Полный экземпляр содержит около 50go (при SSD), но наша основная база данных только 15go. < /P>
Мы получаем экстремальные замедления на большинстве страниц нашего приложения в середине дня, когда он наиболее используется. С некоторыми страницами, которые занимают 40 -е (или более) для загрузки. 5 одновременных запросов приводят нас к 3S AVG, 10 одновременно до 7 с, с 20 до 30 с ... < /p>
Мы пробовали все виды оптимизации, индексы (на каждом столбце отдельно, составной из каждого столбца запроса). В конце концов, мне удалось разделить время на два, а затем три, но это просто толкает проблему дальше. Что до сих пор не чувствует, что этого достаточно (в дополнение к тому, чтобы быть более дорогим). < /P>
Вот экзамены одного из проблемных запросов (подсчет, используемый для страниц). Это упрощенная версия, оптимизированная как можно больше, и все же она занимает около 150 мс, что недостаточно, чтобы предотвратить ее замедление при выполнении одновременных запросов. Как я уже сказал, у нас есть индексы по вопросам assure_date, customer_id, статуса, рабочего процесса и Customer_id+Status+Workflow+Vicele_Date. angese_date - это дата, customer_id bigint, статус и целое число рабочего процесса. < /p>
select count(i1_0.id)
from invoice i1_0
where i1_0.issue_date BETWEEN '2025-01-01' and '2025-07-30'
and (i1_0.customer_id = 20
and (i1_0.status, i1_0.workflow) in ((1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1))
);
< /code>
Этот конкретный запрос возвращает результаты 70 тыс. Результатов примерно на 4 м без какого -либо фильтра. ?|id |select_type|table|partitions|type |possible_keys |key |key_len|ref|rows |filtered|Extra |
|---|-----------|-----|----------|-----|---------------------------------------------------------------------------------------------------------|----------|-------|---|-------|--------|------------------------|
|1 |SIMPLE |i1_0 | |range|invoice_issue_date_IDX,invoice_customer_id_IDX,invoice_workflow_num_IDX,invoice_status_num_IDX,composite_idx|composite_idx|23 | |145 523|100 |Using where; Using index|
< /code>
Обновление 2 < /strong>
Я обновил базу данных до 8CPU, 32GO и попробовал еще раз. Один только запрос не идет быстрее (неудивительно), но одновременные запросы, очевидно, лучше. Очевидно, что это лучше, но это не похоже на реальное решение? Я удалил индексы, потому что, как я уже говорил, я пробовал все разные виды, и, хотя были некоторые улучшения, ничто не решило основную проблему. (Что, следуя советам @shadow, вероятно, где -то еще) < /p>
CREATE TABLE `invoice` (
`id` bigint NOT NULL AUTO_INCREMENT,
`invoice_type_code` varchar(10) NOT NULL COMMENT ,
`issue_date` date DEFAULT NULL,
`category_code` varchar(3) DEFAULT NULL COMMENT ,
`document_currency_code` varchar(3) DEFAULT NULL COMMENT ,
`tax_exclusive_amount` decimal(19,6) DEFAULT NULL COMMENT ,
`tax_inclusive_amount` decimal(19,6) DEFAULT NULL COMMENT ,
`payable_amount` decimal(19,6) DEFAULT NULL COMMENT ,
`payment_means_code` varchar(11) DEFAULT NULL COMMENT ,
`datecreated` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`dateupdated` timestamp NULL DEFAULT NULL,
`tax_amount` decimal(19,6) DEFAULT NULL COMMENT ,
`percent` decimal(19,1) DEFAULT NULL,
`supplier_id` bigint DEFAULT NULL,
`customer_id` bigint DEFAULT NULL,
`downloaded` bit(1) DEFAULT NULL COMMENT ,
`status_date` datetime DEFAULT NULL COMMENT ,
`submission_type` varchar(100) DEFAULT NULL COMMENT ,
`tax_type` varchar(100) DEFAULT NULL COMMENT ,
`market_number` varchar(100) DEFAULT NULL COMMENT ,
`obligation_number` varchar(50) DEFAULT NULL,
`comment_status` varchar(2000) DEFAULT NULL,
`invoice_number` varchar(20) NOT NULL COMMENT,
`flux_id` bigint DEFAULT NULL,
`supplier_service` varchar(100) DEFAULT NULL,
`customer_service` varchar(100) DEFAULT NULL,
`metadata` longtext NOT NULL COMMENT,
`due_date` date DEFAULT NULL COMMENT,
`iban` varchar(34) DEFAULT NULL COMMENT,
`department_id` bigint DEFAULT NULL,
`origin_number` varchar(20) DEFAULT NULL,
`supplier_auxiliary_code` varchar(100) DEFAULT NULL COMMENT ,
`supplier_type` varchar(100) DEFAULT NULL COMMENT ,
`supplier_type_code` varchar(100) DEFAULT NULL COMMENT ,
`accounting_date` date DEFAULT NULL COMMENT ,
`custom_info` varchar(500) DEFAULT NULL,
`payment_date` date DEFAULT NULL COMMENT ,
`invoice_format` enum() NOT NULL,
`portal` enum() DEFAULT NULL,
`is_subscriber_deposit` bit(1) DEFAULT b,
`owner_type` enum() DEFAULT NULL,
`from_emission` bit(1) DEFAULT b,
`extracted_from_document` varchar(255) DEFAULT NULL,
`invoice_number_back_03_25` varchar(20) DEFAULT NULL,
`document_type` bigint NOT NULL,
`purchase_accounting_downloaded` bit(1) DEFAULT b,
`status` int DEFAULT NULL,
`workflow` int DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_invoice_to_customer` FOREIGN KEY (`customer_id`) REFERENCES `structure` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `fk_invoice_to_flux` FOREIGN KEY (`flux_id`) REFERENCES `invoice_flux` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `fk_invoice_to_supplier` FOREIGN KEY (`supplier_id`) REFERENCES `structure` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB AUTO_INCREMENT=5104843 DEFAULT CHARSET=utf8mb3 COMMENT=


Подробнее здесь: https://stackoverflow.com/questions/797 ... nce-issues
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»