|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
FB 3.0.8. Сегодня запустили один запрос, который включает много полей для группировки. Через некоторое время на диске закончилось место под файл сортировки (90 Гб), и сервер начал сыпать разными сообщениями про нехватку места, например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: plaintext 1. 2. 3. 4. 5.
В итоге база остановилась с сообщениями про Firebird consistency check. Хотя на самом деле ничего криминального не произошло. Добавлю, что уже писал несколько лет назад, что нехватка места под временный файл приводит к вот такому итогу. Валидация базы после перезагрузки сервера показала, что все ОК. Могу ли я создать тикеты на следующую тему: 1. Останавливать выполнение запроса, если размер временного файла превышает определенный размер (настраивается в firebird.conf)? Сейчас свободно 200 Гб, но нет гарантии, что через пару лет окажется достаточно. 2. Корректно обрабатывать соединением нехватку места для временного файла? Другие коннекты не виноваты, что кончилось место в Temp Directories. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 04:22 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax Другие коннекты не виноваты, что кончилось место в Temp Directories. У вас база и Temp на одном диске? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 10:12 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ggreggory, Нет. Temp на диске C, сама база (базы) на диске D. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 10:23 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax, если есть возможность, то подумай о миграции на 4.0. Там для широких сортировок есть улучшения (новый метод доступа REFETCH) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 10:30 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMaxdatabase file appears corrupt (C:\WINDOWS\TEMP\FB_TABLE_V2FCZR) это не файл базы, и не файл сортировки. Это GTT. Структуру имеет такую же как в базе, поэтому при нехватке места, естественно, его скрючило. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 10:44 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
kdv CyberMaxdatabase file appears corrupt (C:\WINDOWS\TEMP\FB_TABLE_V2FCZR) это не файл базы, и не файл сортировки. Это GTT. Структуру имеет такую же как в базе, поэтому при нехватке места, естественно, его скрючило.Как бы там ни было, это ошибка. Должно было отвалиться выполнение этого стейтмента с ошибкой, возможно - нескольких одновременно, кому не хватило, но не останавливаться же всей базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 11:01 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax Могу ли я создать тикеты на следующую тему: 1. Останавливать выполнение запроса, если размер временного файла превышает определенный размер (настраивается в firebird.conf)? Сейчас свободно 200 Гб, но нет гарантии, что через пару лет окажется достаточно. 2. Корректно обрабатывать соединением нехватку места для временного файла? Другие коннекты не виноваты, что кончилось место в Temp Directories. Другой вопрос - какая судьба их ждёт :) 1. Можно обсудить, но есть сомнения, что это поможет и не будут "наказаны" невиновные 2. Без воспроизводимого примера такой тикет имеет мало шансов на исправление. С примером - обещаю заняться им сразу как воспроизведу проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2022, 22:31 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
hvlad 1. Можно обсудить, но есть сомнения, что это поможет и не будут "наказаны" невиновные Тогда моя точка зрения на этот вопрос. При выполнении запроса FB создает структуры под сортировку, группировку и т.д. (это неважно). Когда размер структуры достигает определенного размера (настраивается в firebird.conf), он из памяти перемещается во временный файл. Если размер файла относительно невелик (под этим размером можно подразумевать в принципе любой размер в гигабайтах), то все ОК. Если же размер этого временного файла становится достаточно большим (на усмотрение администратора, например, 100 Гб), это означает, что что-то пошло не так (программист ошибся в запросе или не учел предполагаемый размер выборки). Это первое. Второе. Как известно, место, выделяемое администраторами серверов под временные файлы, ограничено. Если Temp directory находится на системном диске (это не запрещено), то несмотря на наличие 500 Гб свободного места, хотелось бы, чтобы из них FB было максимум взято не более 450 Гб (нужно место для самой ОС). Сейчас способа указать указать максимальный размер файлов под временные нужды нет и FB забирает все пространство, какое есть, нарушая работу ОС или иных сервисов, которые тоже работают с этим диском. Итого: 1. Необходима настройка ограничения по максимальному объему дискового пространства под временные файлы. Это защитит другие сервисы, использующие этот же диск, от внезапного исчезновения свободного места и от специального/случайного выполнения запроса, выбирающего все свободное место на диске. 2. Необходима настройка ограничения по максимальному размеру временных файлов в рамках соединения. Я уверен, что у нас выборки, которые требуют 50 Гб файла под сортировку - это что-то из ряда вон выходящее, и с такими запросами надо разбираться. Это защитит от опустошения дискового пространства под временные файлы одним соединением, ломая работу других соединений (у них не остается свободного места под свои небольшие сортировки). Добавлю, что когда размер БД был в районе пары десятков гигабайт, этого не требовалось. Но когда размер БД подходит к сотне Гб, а значит, растут и размеры некоторых выборок, такое ограничение просто необходимо. hvlad С примером - обещаю заняться им сразу как воспроизведу проблему. Будет сделано. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 08:42 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMaxДобавлю, что когда размер БД был в районе пары десятков гигабайт, этого не требовалось. Но когда размер БД подходит к сотне Гб, а значит, растут и размеры некоторых выборок, такое ограничение просто необходимо. Размер временного файла для сортировки не связан напрямую с размером БД. Он зависит от ширины набора данных для сортировки и количества записей. Кривым запросом можно и на employee.fdb создать временный файл под сортировку в 100Гб. Ещё раз отмечу, что в 4.0 для широких сортировок используется другой алгоритм сортировки, который позволяет избежать содания гигантских временных файлов CyberMaxНеобходима настройка ограничения по максимальному объему дискового пространства под временные файлы. Это защитит другие сервисы, использующие этот же диск, от внезапного исчезновения свободного места и от специального/случайного выполнения запроса, выбирающего все свободное место на диске. сильно сомневаюсь что проверка такого ограничения может быть эффективно реализована в архитектуре классик. Ограничение в рамках коннекта наверное возможно, но там надо смотреть насколько это дорого будет ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 09:33 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Симонов Денис Размер временного файла для сортировки не связан напрямую с размером БД. Он зависит от ширины набора данных для сортировки и количества записей. Кривым запросом можно и на employee.fdb создать временный файл под сортировку в 100Гб. Да, напрямую не связан. Да, можно и с табличкой в 100 записей создать файл сортировки на 100 Гб. Симонов Денис Ещё раз отмечу, что в 4.0 для широких сортировок используется другой алгоритм сортировки, который позволяет избежать содания гигантских временных файлов Еще раз напишу - речь идет не об алгоритмах сортировки, а об устранении потенциальных уязвимостей. На сервере может быть свободно 5 Гб под файлы сортировки. И FB все это съест и еще попросит. С непредсказуемым эффектом. Симонов Денис сильно сомневаюсь что проверка такого ограничения может быть эффективно реализована в архитектуре классик. Ограничение в рамках коннекта наверное возможно, но там надо смотреть насколько это дорого будет Могу предположить, что очень дешево - проверка требуется только при увеличении размера временного файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 09:43 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax Могу предположить, что очень дешево - проверка требуется только при увеличении размера временного файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 09:51 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, Каких сотен, ты о чем? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 09:53 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Если говорить о винде, то кроме FIREBIRD_TMP на системном диске находится ещё и FIREBIRD_LOCK (%ProgramData%\firebird) Если говорить о линуксах, то, по умолчанию, "они оба" находятся в /tmp. Если одна или несколько сортировок полностью заняли TempCacheLimit, то все одновременные сортировки (даже небольшие) могут оказаться на диске. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 09:58 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, в рамках одного коннекта сотен не будет. А вот если общий размер контролировать, то тут уже очень сомнительно. Пока размеры всех файлов соберёшь, они уже станут неактуальными ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 10:00 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ОбоШтоИразговор. Процесс(ы) firebird могут создавать пачки временных файлов. Более того, если я правильно понимаю, исходная проблема вообще возникла не для сортировки (fb_sort), а для GTT (fb_table) и поврежденным оказался именно (конкретный) экземпляр GTT. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 10:06 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
У меня вопрос не совсем по теме. Почему FB создает временный файл в C:\WINDOWS\TEMP\FB_TABLE_6JN3N6, если у меня Temp Directory - c:\Temp? А файл сортировки создается в c:\Temp. Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 10:37 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
И разные сообщения при нехватке места для GTT и сортировки. Нет места для GTT: Код: plaintext 1. 2. 3. 4.
Нет места под сортировку: Код: plaintext 1. 2. 3. 4.
В первом случае есть имя файла, что очень удобно - сразу понятно, где места нету. Во втором случае имя тщательно скрывается. Я думаю, вот по этому поводу точно можно создать тикет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 10:43 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
hvlad, я поискал другие сообщения про порчу файлов FB_TABLE_XXX и могу сделать предположение - это происходит при сработке internal Firebird consistency check. Вот в прошлом году: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Вот на прошлой неделе: Код: 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.
Сообщение "Error during savepoint backout - transaction invalidated" к данной проблеме, видимо, не относится. Я не знаю, как вызвать сработку internal Firebird consistency check, чтобы проверить теорию. Если кто подскажет способ, попробую воспроизвести. P.S. Я в курсе, что это не порча самой БД и никак на нее не влияет. Тем не менее, некорректное поведение FB налицо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 10:52 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax У меня вопрос не совсем по теме. Почему FB создает временный файл в C:\WINDOWS\TEMP\FB_TABLE_6JN3N6, если у меня Temp Directory - c:\Temp? А файл сортировки создается в c:\Temp. Код: plaintext 1. 2. 3. 4.
Вот тут 22408166 и ниже, обсуждалось что параметр TempDirectories в конфиге не задает место создания файлов fb_table_XXX. Задать это можно через параметр среды окружения fb_table. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:22 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
imho, разумно задавать лимит не на файлы сортировки или gtt, а лимит на свободное место. Т.е. скажем в настройках указать 1 Гб и если места становится меньше указанного выдавать ошибку. Думаю что это не сложно сделать для любой архитектуры сервера. Исчерпание места на системном диске может привести не только к падению firebird-а, но и к падению всей операционной системы и часто к необходимости её переустановки (натыкался на примере windows server 2012). И так же неплохо задавать лимит для диска с базой данных. Если на диске с базой меньше установленного лимита - отказывать в подключении. Сам сталкивался в нулевых еще на 1-ом firebird-е с порчей базы на переполненном диске. С тех пор при подключении вызываю UDF, которая проверяет место сразу после коннекта и при малом объеме не подключает. Но контроль за файлами сортировки с помощью UDF не реализовать. Разумно также, чтобы какие-то лимиты, хоть самые минимальные, уже были по дефолту, без настроек firebird.conf. Конфиг могли забыть настроить, перетереть при переустановке и т.д. Когда служиться п...ц можно конечно уже разобраться во всём, найти виновных, но будет уже поздно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:38 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ggreggory, ещё раз повторяю, проверка свободного места на диске совсем не бесплатна. Вот сколько раз в секунду придётся это делать на нагруженном серваке? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:42 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
fraks параметр TempDirectories в конфиге не задает место создания файлов fb_table_XXX fraks Задать это можно через параметр среды окружения fb_table В fb4 введён новый параметр TempTableDirectory ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:45 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax Я не знаю, как вызвать сработку internal Firebird consistency check, чтобы проверить теорию. Если кто подскажет способ, попробую воспроизвести. Ведь даже если я сейчас внесу исправление "вслепую" - нужен способ его подтвердить. CyberMax P.S. Я в курсе, что это не порча самой БД и никак на нее не влияет. Тем не менее, некорректное поведение FB налицо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:50 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Симонов Денис ggreggory, ещё раз повторяю, проверка свободного места на диске совсем не бесплатна. Вот сколько раз в секунду придётся это делать на нагруженном серваке? Всегда можно сделать трешхолд на такую проверку. Например, функция проверки хранит предыдущее состояние свободного места и GetTickCount64 его получения. И если с момента предыдущего получения прошло менее, скажем, 10 сек, возвращать предыдущее значение. За мгновение диск не заполнится, есть аппаратные ограничения скорости записи. Значения хранить в разделяемой памяти, так чтобы все процессы/потоки пользовались ими и не было зависимости от числа коннектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:51 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ggreggory, в конкурентной среде любые проверки существования\достаточности ресурса до совершения действия потребляющего этот ресурс - не имеют большого смысла. Это азбука. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:52 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
hvlad в конкурентной среде любые проверки существования\достаточности ресурса до совершения действия потребляющего этот ресурс - не имеют большого смысла. Это азбука. Ну так сделать не до, а в процессе совершения действия - в процессе заполнения файла сортировки или временной таблицы. Вот сделали ведь в 4-ке таймаут времени выполнения оператора - значит время проверяется в процессе выполнения. Так и контроль за свободным местом сделать в процессе заполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 12:00 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ggreggory, надо понимать что, 1. коннектов может быть много, каждый изменяет свободное пространство в любую секунду 2. Firebird существует не один, есть вероятность что диск сожрёт любая другая программа ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 12:03 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Согласен с Владом на счет проверки прикладным софтом (в данном случае файрбердом) системных ресурсов, кои могут неожиданно появиться или исчезнуть. Все дружно забыли про квотировании на уровне ОСи, и квоты эти двигать можно в любой момент как вверх, так и вниз. Вот не падать с грохотом, если вдруг ресурса не не стало - это гут (как вариант удавить процесс классика с руганью в логи, или откинуть нитку супера с его коннектом и опять таки руганью в логи), а тыща предварительных проверок - баловство. ggreggory За мгновение диск не заполнится, есть аппаратные ограничения скорости записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 12:12 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ggreggory, ты не путай тёплое с мягким. Таймаут считается для одного конкретного статмента или коннекта. Там нет конкуренции ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 12:12 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Симонов Денис ggreggory, ты не путай тёплое с мягким. Таймаут считается для одного конкретного статмента или коннекта. Там нет конкуренции И ограниченного ресурса тоже нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 12:25 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Симонов Денис 1. коннектов может быть много, каждый изменяет свободное пространство в любую секунду Мое предложение от числа коннектов не зависит. Симонов Денис 2. Firebird существует не один, есть вероятность что диск сожрёт любая другая программа Так и метеорит может упасть, что уж тут поделаешь. Вопрос в реализации схемы, которая не сделает возникновение коллапса невозможным, а сократит его вероятность в 100500 раз. Невозможного не бывает, возможно всё! Но с маленькой вероятностью :) Ivan_Pisarevsky и квоты эти двигать можно в любой момент как вверх, так и вниз. Это ещё надо конкретно постараться. В любом случае если криворукий сисадмин корячит сервер и в этот момент появятся ошибки при работе с базой сразу станет понятно кто виноват. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 15:23 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ggreggory Вопрос в реализации схемы, которая не сделает возникновение коллапса невозможным, а сократит его вероятность в 100500 раз. ggreggory Это ещё надо конкретно постараться. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 15:40 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Ivan_Pisarevsky Ценой кратных в 2-3 тормозов? Да не будет ничего тормозить, с чего вы взяли? Ivan_Pisarevsky Ничего не понятно. Постараться что? место на томе, куда надо писать файберду может динамически увеличено несколькими путями, от отжатия слишком затянутых квот, до выделения доп места средствами ФС, СХД или чего там в железке есть. Или просто удалили левый хлам и места стало больше. Мне тоже не понятно. Если вы увеличиваете свободное место - это лучше, значит наоборот контроль не сработает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 15:58 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ggreggory Да не будет ничего тормозить, с чего вы взяли? ggreggory Если вы увеличиваете свободное место - это лучше, значит наоборот контроль не сработает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 16:21 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ggreggory, я больше не буду повторять - любая подобная проверка, даже если она бесплатна, ничего не гарантирует. А следовательно - бессмысленна. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 16:37 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Ivan_Pisarevsky Если можешь написать такой код, то где же патч? Мое предложение по коду было выше. Другое дело, что, вероятно, могут быть какие-либо виртуальные среды, в которых получение свободного места действительно мега-трудоемкая операция. Ivan_Pisarevsky Сработает и даст по рукам, если проверить, когда места еще не было, потом оно появилось, но по рукам уже дадено. Теперь понял о чём вы. Да, в этом случае такую проверку стоит отключать. hvlad ggreggory, я больше не буду повторять - любая подобная проверка, даже если она бесплатна, ничего не гарантирует. А следовательно - бессмысленна. Я лишь предложил свой путь решения проблемы. Возможно, кто-нибудь предложит что-то более рациональное... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 16:41 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Ivan_PisarevskyСогласен с Владом на счет проверки прикладным софтом (в данном случае файрбердом) системных ресурсов в HQbird есть всякие проверки, в том числе и про место в temp, и какие запросы сколько сортировок генерят (сверх лимита). Но такой мониторинг хорош когда место вдруг уменьшается, но не совсем до конца, и админ успевает понять что случилось и почему, и как это устранить. А вот вышеописанная ситуация - и 90 гиг сортировка, и еще и GTT фиг знает какого размера - здесь "предупреждать" некогда, потому что даже с предупреждениями сервера если кто-то сделал сортировку 90 гиг и запрос не закрыл, так больше никому всё равно места не хватит, и никто не может запретить после закрытия запроса с сортировкой 90 гиг запустить этот запрос тут же еще раз. Здесь ситуацию надо лечить просто удвоением места в temp, как минимум. Опять же, пока кто-то не зафигачит запрос с сортировкой 180 гиг. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 19:38 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1559816]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
3ms |
others: | 245ms |
total: | 410ms |
0 / 0 |