|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
Есть таблица с примерно 22 млн записей. select count(*) по ней занимает примерно 40 минут, что очень долго. Для чего нужен select count(*) не спрашивайте, т.к. он нужен не мне (на самом деле используется запрос посложнее select count(*)). Доступа к базе нету и вообще пока что обладаю минимальной инфой о базе и о том, как её используют. Статистика при выполнении запроса такая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Есть также вьюха, основанная на этой таблице. select count(*) из ней ещё печальнее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Firebird скорее всего 2.5.* на винде. Можно из этих данных понять в чём причина тормозов? Или нужно больше инфы? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 09:58 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
Сколько страниц занимает таблица ? Сколько там индексов ? Чему равен FileSystemCacheThreshold ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 10:05 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
ArtDen, очевидно что дисковая подсистема у вас хилая. Страничный кеш конечно задран, но его всё равно не хватает. Подозреваю что тот кто задрал страничный кеш забыл про FileSystemCacheThreshold Ну и если запрос делался под нагрузкой (т.е. были другие коннекты), то статистику можно смело выкинуть, ибо Код: plaintext 1. 2.
это глобальные счётчики для супера. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 10:10 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
Ясно. Попробую запросить данные о дисковой подсистеме, статистику по базе и файл настройки FB ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 10:20 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
ArtDen, ну про таблицу, то ты можешь ответить. Хотя бы её DDL приведи, есть подозрение что она очень широкая. Ну и ещё есть MON$ таблицы, есть системные контекстные переменные, статистику по БД тоже можно получить через сервисы. Как минимум из них можно узнать версию Firebird и размер страницы. Не происходит ли сборка мусора при выполнении этого запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 10:27 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
ArtDen, еще непонятен размер страницы, нужен вывод gstat -h database. Симонов ДенисПодозреваю что тот кто задрал страничный кеш забыл про FileSystemCacheThreshold если уж даже я про него забываю, то большинство про него вообще не знают :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 12:37 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
Симонов Денис, не так быстро. Надо ещё на работу придти )) Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 12:41 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
Отправил им такой скрипт: Код: plaintext 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.
Жду что ответят ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 13:03 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
Симонов ДенисНе происходит ли сборка мусора при выполнении этого запроса? в супере - нет. если только GCPolicy не выставлен в cooperative. В нормальном случае select count должен выполниться максимально быстро (насколько возможно), а если там был мусор - его начнет собирать фоновый сборщик, потом. У меня на тестовой базе по 14 миллионам более широких записей (в 1.5-2 раза) чем приведены, select count длится 16 секунд (в монопольном режиме). С учетом приведенного page reads либо там просто офигенно интенсивная работа с базой шла, либо диск где база дико медленный. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 13:04 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
kdv, меня настораживает Writes 5811 Если в БД никто из других коннектов не пишет, то могу сделать только одно предположение что происходит сборка мусора. Ну и начиная с 2.0 по умолчанию стоит комбинированная политика Garbage collection policy Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 13:16 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
Прислали результат. Если вкратце, то конфиг FB такой: Код: plaintext 1. 2. 3. 4. 5. 6.
Всё остальное (системная инфа + данные gstat) - в приложенном файле. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 16:44 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
ArtDenDefaultDbCachePages = 1000000 FileSystemCacheThreshold = 320000 ну что за глупость. FileSystemCacheThreshold должен быть БОЛЬШЕ DefaultDbCachePages, иначе вырубится файловый кэш операционной системы. Потом, кэш 1млн страниц, по 8к это 8 гиг. А памяти этой виртуалке, насколько я вижу, выделено 7? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 17:16 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
Разве объём физ. памяти это не Total Physical Memory? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 17:26 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
ArtDen, За FileSystemCacheThreshold уже сказали. GCPolicy = background - уверен, что так и надо ? CpuAffinityMask = 7 - убери это, или этот сервер обслуживает несколько БД ? MaxUnflushedXXX - уверен ? Причем, FW выключен. Таблица CURV_VERSIONS занимает 4078168 страниц, она в любом случае не влезет в кеш FB в 1млн страниц. А кеш файловой системы отключен. Есть 3 индекса с глубиной 4 - пора подумать об увеличении р-ра страницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 18:34 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
ArtDenРазве объём физ. памяти это не Total Physical Memory? так это, к чему там про vmware написано? кстати, не сразу дошло. 2.5 + суперсервер. Это же ... либо однопользовательское, либо для чахлых 5-10 коннектов, не больше. Если в момент select count что-то еще шло параллельно, так понятно, почему так медленно. Суперсервер 2.5 по ядрам не распараллеливается. И ядер, собственно, 2. Что это за система, и сколько одновременных пользователей она должна обслуживать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 18:40 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
hvladТаблица CURV_VERSIONS занимает 4078168 страниц, она в любом случае не влезет в кеш FB в 1млн страниц. А кеш файловой системы отключен. самое веселье это average fill: 7% у этой таблицы. То есть, страницы почти пустые, и серверу для select count приходится прочитать в 14 раз больше страниц, чем если бы они плотно были заполнены. Да еще с выключенным файловым кэшем... Если поделить размер этой таблицы на 40 минут, получается скорость чтения 13 мегабайт в секунду. Что весьма жидко. p.s. видимо, в таблице до того было в 7-10 раз больше записей, а потом их массово удалили. Да и рестор базы из бэкапа уже 8 лет не делался. Конечно, аптайм базы впечатляет, но ... после вот таких массовых операций все же б-р делать надо. Да, и средняя активность по транзакциям - 10 транзакции в час за 8 лет (или 602 транзакции в сутки). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 18:51 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
Начинаю собирать рекомендации по исправлению ситуации 1. backup/restore с новым размером страницы 16k 2. Убрать GCPolicy = background MaxUnflushedWrites = 500 MaxUnflushedWriteTime = 5 CpuAffinityMask = 7 3. DefaultDbCachePages в 2 раза меньше, т.к. страница в 2 раза больше 4. Сколько ставить FileSystemCacheThreshold ??? 5. Выяснить почему такой тормозной диск и можно ли его сделать побыстрее. 6. Выяснить сколько реально доступно ОЗУ kdv , 8 лет - это какая-то ошибка. Я думаю базе несколько месяцев, не более. Потом что-то мне подсказывает, что там не два ядра, а 2 CPU. А сколько ядер у этих CPU - ХЗ. Хотя, с суперсервером 2.5 это не важно (но это важнее для нашего сервака). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 19:42 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
ArtDen2. Убрать MaxUnflushedWrites = 500 MaxUnflushedWriteTime = 5 рубанул с плеча, опять ничего не читая. Эти параметры работают только при выключенном Forced Writes. А у базы (в заголовке) про статус FW вообще ничего нет. Я уже не помню, по умолчанию оно включено или выключено. (Влад написал, что выключено). ArtDen 8 лет - это какая-то ошибка. Я думаю базе несколько месяцев, не более. ну какая же ошибка Creation date Nov 24, 2011 15:13:38 Ноябрь 2011 года. Или 8 лет назад сделали болванку, а несколько месяцев назад начали с ней работать? ArtDen Потом что-то мне подсказывает, что там не два ядра, а 2 CPU. А сколько ядер у этих CPU - ХЗ. да, systeminfo ядра не показывает, только процессоры, так что там 2 проца. Но: System Manufacturer: VMware, Inc. System Model: VMware Virtual Platform вот это что? Я так понимаю, что сервер этот в виртуалке. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 19:52 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
ArtDen, всё верно. если в Attributes нет force write, значит оно выключено. А значит включаются параметры maxunflushed... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 19:57 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
kdv, судя по всему люди наткнулись на тормоза и решили крутить все подряд параметры, не особо понимая их назначения ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 21:07 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
kdv , хорошо, всё что связано с FW оставляю. Но всё равно остаётся непонятный момент с FileSystemCacheThreshold. На сайте FB в разделе "Firebird Documentation Index -> Firebird 2.5 Release Notes -> Configuration Parameter Additions and Changes -> Parameters Affecting Filesystem Cache Usage" написано: FileSystemCacheThreshold sets a threshold determining whether Firebird will allow the page cache to be duplicated to the filesystem cache or not. If this parameter is set to any (integer) value greater than zero, its effect depends on the current default size of the page cache: if the default page cache (in pages) is less than the value of MaxFileSystemCache (in pages) then filesystem caching is enabled, otherwise it is disabled. Хорошо, смотрим что такое MaxFileSystemCache. И видим там же: MaxFileSystemCache, introduced in Firebird 2.1, is no longer a valid parameter. Как это вообще понимать? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 12:40 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
firebird.conf# ---------------------------- # File system cache threshold # # The threshold value that determines whether Firebird will use file system # cache or not. File system caching is used if database cache size in pages # (configured explicitly in database header or via DefaultDbCachePages setting) # is less than FileSystemCacheThreshold value. # # To use file system cache always set FileSystemCacheThreshold to a large value. # To bypass file system cache for all databases set FileSystemCacheThreshold to # zero. # # Type: integer, measured in database pages # #FileSystemCacheThreshold = 65536 Вопросы есть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 13:24 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
ArtDen, вот странный ты человек. Вроде открываю firebird.conf там всё по английски расписано для каждого параметра. отрывок firebird.confавтор# ---------------------------- # File system cache threshold # # The threshold value that determines whether Firebird will use file system # cache or not. File system caching is used if database cache size in pages # (configured explicitly in database header or via DefaultDbCachePages setting) # is less than FileSystemCacheThreshold value. # # To use file system cache always set FileSystemCacheThreshold to a large value. # To bypass file system cache for all databases set FileSystemCacheThreshold to # zero. # # Type: integer, measured in database pages # #FileSystemCacheThreshold = 65536 # ---------------------------- # File system cache size # # This setting controls the maximum amount of RAM used by Windows file system # cache on 64-bit Windows XP, Windows Server 2003 SP1 or later host. It has no # effect for Unix hosts in this release yet. # # Note that the lowest number presently supported is 10%, and the highest number # is 95%; numbers outside these limits will be set to the default of 30%. # # If the cache size has already been selected when the engine starts the host # setting will not be changed. Thus you may need to reboot the host for the # change of this setting to have effect. # # To leave host caching settings unchanged set this parameter to 0. This is # the default parameter value. # # Security note # To adjust the setting engine needs SeIncreaseQuotaPrivilege right. Built-in # service accounts and administrators have it by default. Installer grants this # right to Firebird service account. If the engine fails to adjust the cache # size setting it will log warning message to the firebird.log and continue. # # Type: integer, measured in % of total physical RAM # #FileSystemCacheSize = 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 13:24 |
|
Медленный select count(*)
|
|||
---|---|---|---|
#18+
ArtDenКак это вообще понимать? Читаем все что там написано: там жеThis parameter was introduced in V.2.1 as MaxFileSystemCache. Because its name has been changed, its description is repeated here to alert upgraders. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 13:30 |
|
|
start [/forum/topic.php?fid=40&msg=39705604&tid=1560973]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 312ms |
total: | 445ms |
0 / 0 |