powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация работы MySQL при выборке 50кк строк
8 сообщений из 33, страница 2 из 2
Оптимизация работы MySQL при выборке 50кк строк
    #39073776
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electronnnnnmiksoftпропущено...
Тут хотя бы приблизительный порядок надо навести, иначе вы систему до свопа доведете. Или уже довели.
в текущем треде только одна цель - ускорить эти тяжелые неоптимизированные запросы. Если нужно будет больше памяти серверу - добавим, если надо будет под базы подключить ссд - сделаем, но нужно точно знать из-за чего сначала после ребута сервиса запросы идут по одной секунде, после 4-6 часов работы по 11-15 секунд. Нет нужды перекраивать лимиты под более низкие именно для оптимизации потребляемой сервисом памяти.

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

кроме того запрос у вас не из таких, что можно оптимизировать на раз одним советом на форуме.

в общем, надо вам лучше нанимать специалиста. но учтите, что результат -- оптимизированный запрос именно в таком виде -- и в этом случае не гарантирован.
...
Рейтинг: 0 / 0
Оптимизация работы MySQL при выборке 50кк строк
    #39073779
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electronnnnnmiksoftпропущено...
Это картина "после 4-6 часов работы" ?
После суток-двух. Картина примерно одна и та же с начала перезагрузки сервера до начала торможений по запросам.

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

рецепт:
- конфигурацию вернуть на дефолтную.
- убрать query cache в 0
- если база большая, установить innodb buffer cache в половину или треть физической памяти на компе.
-дальше начинать уже от этой печки плясать заново.

и еще, конкретные запросы очень редко когда можно оптимизнуть изменением конфигурации сервера, разве что в ней что-то очень сильно не так, но только на одном запросе это проявляется.
...
Рейтинг: 0 / 0
Оптимизация работы MySQL при выборке 50кк строк
    #39073804
Electronnnnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivmiksoftпропущено...
Сделайте 128 или 256 Мбайт.


да в 0 эту шнягу надо ставить, в ноль.

выставил в ноль - реально даже сразу после перезагрузки стали запросы пролетать быстрее.
...
Рейтинг: 0 / 0
Оптимизация работы MySQL при выборке 50кк строк
    #39074074
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElectronnnnnMasterZivпропущено...



да в 0 эту шнягу надо ставить, в ноль.

выставил в ноль - реально даже сразу после перезагрузки стали запросы пролетать быстрее.

Дело не в том, что это должно было бы влиять на производительность -- не должно было, разве за счёт того, что не тратилась бы зазря память.

Дело в том, что этот кэш запросов в принципе -- идиотская затея. СУБД не должна этим заниматься.
...
Рейтинг: 0 / 0
Оптимизация работы MySQL при выборке 50кк строк
    #39074077
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electronnnnn,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT
	task.id AS task_id
FROM streb_task AS task
INNER JOIN streb_item AS item ON task.id = item.id
INNER JOIN streb_person AS person ON item.created_by = person.id
INNER JOIN streb_project AS project ON item.project = project.id
INNER JOIN streb_taskperson AS taskperson ON taskperson.task = task.id
INNER JOIN streb_item AS item2 ON taskperson.id = item2.id
INNER JOIN streb_projectperson AS projectperson ON projectperson.project = project.id
INNER JOIN streb_item AS item3 ON projectperson.id = item3.id
WHERE
    (   taskperson.person = 199129 
     OR (projectperson.person = 199129 AND projectperson.is_pm = 1 ) 
     OR project.id in (SELECT project_id FROM streb_task_notifications_users WHERE people_id = 199129) 
     OR task.id IN (SELECT task_id FROM streb_task_notifications_users WHERE people_id = 199129)
    )
AND item.pub_level >= 4
AND item2.state = 1
AND item3.state = 1
AND item.state = 1
AND task.status NOT IN (4, 8)
GROUP BY task.id;



У тебя реально такой дебильный запрос, или это "типа для примера" ?
GROUP BY не нужен, нужен DISTINCT.


На эти поля :

Код: plaintext
1.
2.
3.
4.
taskperson.person
projectperson.person
project.id
task.id

есть индексы ? Должны быть на все поля по отдельности в каждой из соотв. таблиц.
...
Рейтинг: 0 / 0
Оптимизация работы MySQL при выборке 50кк строк
    #39074079
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElectronnnnntanglirНасчёт оптимизации самого запроса - я вижу только 2 пути, оба не особо хорошие:
К сожалению, на данном этапе запрос не переписать, требуется помощь или совет, каким образом можно оптимизировать именно сам MySQL сервер для более быстрой обработки.

Надо проверить/создать соотв. индексы. Я написал.
Но я бы тоже рекомендовал начать пробовать переписывать запрос, в смысле, попытаться найти способ это сделать.
...
Рейтинг: 0 / 0
Оптимизация работы MySQL при выборке 50кк строк
    #39074663
Electronnnnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

запрос реальный из CMS , его не переделать пока, приходится пилить пока серверную часть. Сначала снизил innodb_pool_size до 10Гб , запросы стали выполняться по 28 секунд, вернул в 20Гб - ситуация опять как раньше - первые пара часов все ок, потом по 11 секунд.

Текущий конфиг :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
[client]
port            = 3306
socket          = /var/lib/mysql/mysql.sock


[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer_size = 500M
max_allowed_packet = 6400M
sort_buffer_size = 20480M
read_buffer_size = 8M
read_rnd_buffer_size = 2560M
net_buffer_length = 200M
thread_stack = 192K
max_connections = 400
table_open_cache = 512
query_cache_size = 0M
query_cache_type = 1
thread_cache_size = 8
tmp_table_size = 12000M
max_heap_table_size = 12000M
join_buffer_size = 3M
table_cache = 16000
table_definition_cache = 13000
query_cache_limit = 10000M
open_files_limit = 8192
long_query_time = 4
log-slow-queries = /var/log/mysql.slow.log
log_error = /var/log/mysql.err
innodb_thread_concurrency = 0
server-id       = 1
innodb_buffer_pool_size = 20000M
innodb_additional_mem_pool_size = 20M
innodb_file_io_threads = 8
innodb_log_buffer_size = 10000M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_flush_method = O_DIRECT
transaction-isolation = READ-COMMITTED

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 2560M
sort_buffer_size = 25600M

[mysqlhotcopy]
interactive-timeout
...
Рейтинг: 0 / 0
Оптимизация работы MySQL при выборке 50кк строк
    #39074804
Electronnnnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
На эти поля :

Код: plaintext
1.
2.
3.
4.
taskperson.person
projectperson.person
project.id
task.id

есть индексы ? Должны быть на все поля по отдельности в каждой из соотв. таблиц.

Код: plaintext
1.
taskperson.person
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
mysql> show indexes from streb_projectperson;
+---------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table               | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| streb_projectperson |          0 | PRIMARY     |            1 | id          | A         |        3854 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | project     |            1 | project     | A         |         350 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | state       |            1 | state       | A         |           2 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | person      |            1 | person      | A         |         428 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | proj_rights |            1 | proj_rights | A         |           1 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | person_2    |            1 | person      | A         |         428 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | person_2    |            2 | project     | A         |        3854 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | is_pm       |            1 | is_pm       | A         |           2 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | hours       |            1 | hours       | A         |          55 |     NULL | NULL   | YES  | BTREE      |         |
+---------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
9 rows in set (0.00 sec)



Код: plaintext
1.
projectperson.person
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
mysql> show indexes from streb_projectperson;
+---------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table               | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| streb_projectperson |          0 | PRIMARY     |            1 | id          | A         |        3854 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | project     |            1 | project     | A         |         350 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | state       |            1 | state       | A         |           2 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | person      |            1 | person      | A         |         428 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | proj_rights |            1 | proj_rights | A         |           1 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | person_2    |            1 | person      | A         |         428 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | person_2    |            2 | project     | A         |        3854 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | is_pm       |            1 | is_pm       | A         |           2 |     NULL | NULL   |      | BTREE      |         |
| streb_projectperson |          1 | hours       |            1 | hours       | A         |          55 |     NULL | NULL   | YES  | BTREE      |         |
+---------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
9 rows in set (0.00 sec)



Код: plaintext
1.
project.id
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
mysql> show indexes from streb_project;
+---------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table         | Non_unique | Key_name  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| streb_project |          0 | PRIMARY   |            1 | id          | A         |         348 |     NULL | NULL   |      | BTREE      |         |
| streb_project |          1 | pub_level |            1 | pub_level   | A         |           1 |     NULL | NULL   |      | BTREE      |         |
| streb_project |          1 | status    |            1 | status      | A         |           8 |     NULL | NULL   |      | BTREE      |         |
+---------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
3 rows in set (0.00 sec)



Код: plaintext
1.
task.id
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
mysql> show indexes from streb_task;
+------------+------------+------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+
| Table      | Non_unique | Key_name         | Seq_in_index | Column_name      | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+------------+------------+------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+
| streb_task |          0 | PRIMARY          |            1 | id               | A         |       21038 |     NULL | NULL   |      | BTREE      |         |
| streb_task |          1 | parent_task      |            1 | parent_task      | A         |        1168 |     NULL | NULL   |      | BTREE      |         |
| streb_task |          1 | is_folder        |            1 | is_folder        | A         |           2 |     NULL | NULL   |      | BTREE      |         |
| streb_task |          1 | status           |            1 | status           | A         |           4 |     NULL | NULL   |      | BTREE      |         |
| streb_task |          1 | is_milestone     |            1 | is_milestone     | A         |           1 |     NULL | NULL   |      | BTREE      |         |
| streb_task |          1 | milestone        |            1 | for_milestone    | A         |          41 |     NULL | NULL   | YES  | BTREE      |         |
| streb_task |          1 | resolved_version |            1 | resolved_version | A         |           2 |     NULL | NULL   | YES  | BTREE      |         |
| streb_task |          1 | is_released      |            1 | is_released      | A         |           2 |     NULL | NULL   |      | BTREE      |         |
| streb_task |          1 | time_released    |            1 | time_released    | A         |           5 |     NULL | NULL   |      | BTREE      |         |
| streb_task |          1 | evaluation       |            1 | evaluation       | A         |         100 |     NULL | NULL   | YES  | BTREE      |         |
| streb_task |          1 | spent_minute     |            1 | spent_minute     | A         |         333 |     NULL | NULL   | YES  | BTREE      |         |
+------------+------------+------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+
11 rows in set (0.00 sec)



Все селекты отдельно выполняются очень быстро, тормозят именно inner join операции .
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация работы MySQL при выборке 50кк строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]