|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
Появилось еще несколько вопросов по юзанию fbtracemgr. Они не связаны друг с другом и какие-то "мелкие", частично это wishlist. Нет смысла на каждый заводить отдельный топег, поэтому пусть будут сгруппированы в одном месте. 1. При последовательных запусках под win-2000 каждая новая сессия получает номер, на единицу больше предыдущей (завершённой по ctrl-C): Код: plaintext 1. 2. 3. 4. 5. 6. 7.
2. Можно ли добавить параметр в conf, заставляющий трейс писать сообщения в лог и формирующий имя этого лога автоматически (например, по принципу database_name.session_ID.yyyymmdd_hh_mi_ss) ? 3. Если включены log_statement_finish true и print_perf true, то по каким принципам выводятся в статистику системные таблицы (помимо тех, что задействованы в самом DML) ? Например, есть таблица с двумя записями: Код: plaintext
Код: plaintext
* для первого селекта: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
* для второго селекта: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
PS. Получено при следующем содержимом трейс_конфига: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
4. При включенном log_transactions в лог трейса попадут ВСЕ старты и завершения транзакций, в том числе и read only read committed. Можно ли добавить параметр, по которому будут отслеживаться только rollback'и (да и то не всех трн, а лишь тех, что длились свыше указанного в настройках порога, a`la time_threshold для продолжительности стейтментов) ? 5. Можно ли НЕ логгировать все DML к GTT, но логгировать к fixed-таблицам ? 6. Можно ли добавить bool-параметр, при котором в случае переполнения вместо создания новых логов будет просто обнуляться и заполняться заново текущий (он же и единственный) лог ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2011, 00:19 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
Таблоид> Это так и было задумано ? По идее нет, но ничем нехорошим это не грозит. Таблоид> 2. Можно ли добавить параметр в conf, заставляющий трейс писать Таблоид> сообщения в лог и формирующий имя этого лога автоматически Лично я не понял. Это уже есть сейчас и для аудита, и для трассировки - можно как самостоятельно (через сервисы) писать в файл, так и просто перенаправить вывод консоли в файл (твой случай). Или ты что-то другое хочешь? Таблоид> 5. Можно ли НЕ логгировать все DML к GTT, но логгировать к fixed-таблицам ? Юзай инклуд фильтр. Желать фильтр на тип таблиц (кто-то отдельно внешние таблицы захочет обязательно, кому-то вьюхи отдельно понадобятся и т.д.) глупо, ибо фильтр пишется один раз, руки не отсохнут. Да и сама необходимость log_temporary_tables неочевидна. Таблоид> 6. Можно ли добавить bool-параметр, при котором Таблоид> в случае переполнения вместо создания новых логов Таблоид> будет просто обнуляться и заполняться заново текущий Таблоид> (он же и единственный) лог ? А это вообще смешно, ей Богу. Расстреляют же ведь и за дело. Тебе место на диске жалко или в чем проблема? :-) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2011, 01:11 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
Таблоид 1. При последовательных запусках под win-2000 каждая новая сессия получает номер, на единицу больше предыдущей (завершённой по ctrl-C): ... В тоже время в линухе номер будет на единицу больше только в случае, если к базе есть коннект. Если коннектов нет, то новая сессия на линухе получает снова номер = 1. Это так и было задумано ? Ты не внимателен. На линуксе у тебя CS и кроме тебя нет других коннектов. А на win-2000 или не CS, или есть другие коннекты во время твоих экспериментов. Нумерация трейс сессий начинается заново тогда, когда "стартует сервер". Для SS\SC "старт сервера" это первый коннект после запуска процесса, "стоп сервера" - это завершение процесса. Для CS нет единого процесса, поэтому "старт сервера" == первый коннект, "стоп сервера" == полный дисконнект. В любом случае, нумерация сессий не должна тебя особо волновать. Она нужна больше для оперативной работы со списком сессий администратору. Таблоид 2. Можно ли добавить параметр в conf, заставляющий трейс писать сообщения в лог и формирующий имя этого лога автоматически (например, по принципу database_name.session_ID.yyyymmdd_hh_mi_ss) ?Такой параметр уже есть. Для аудита. Если ты хочешь его для пользовательского трейса, то учти, что конфигурацию интерпретирует только трейс-плагин и сам ответь почему не возможно задавать имя файла лога на клиенте в конфигурации трейса. Таблоид 3. Если включены log_statement_finish true и print_perf true, то по каким принципам выводятся в статистику системные таблицы (помимо тех, что задействованы в самом DML) ? По простым. Что было задействованно при выполнении запроса, то и выводится. Таблоид 4. При включенном log_transactions в лог трейса попадут ВСЕ старты и завершения транзакций, в том числе и read only read committed. Можно ли добавить параметр, по которому будут отслеживаться только rollback'и (да и то не всех трн, а лишь тех, что длились свыше указанного в настройках порога, a`la time_threshold для продолжительности стейтментов) ?В принципе - можно. Таблоид 5. Можно ли НЕ логгировать все DML к GTT, но логгировать к fixed-таблицам ?Про фильтры тебе уже сказали. Таблоид 6. Можно ли добавить bool-параметр, при котором в случае переполнения вместо создания новых логов будет просто обнуляться и заполняться заново текущий (он же и единственный) лог ?См. ответ на вопрос 2 и сам скажи, почему этот вопрос бессмысленен. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2011, 02:01 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
Еще пожелание. Можно ли заменить двойные переводы строк в логе трейса одинарными CR/LF, а также убрать отчеркивающие линии (звездочки, черточки) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2011, 16:08 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
Пример статистики в fbtrace: Код: plaintext 1. 2.
По сравнению с ISQL, не хватает инфы по buffers. Нельзя ли добавить, чтобы не вспоминать это через gstat -h или fb.conf ? Кроме того, в одном из тестов было выявлено заметное (30%!) влияние FileSystemCacheThreshold на время выполнения "тяжелого запроса". Это был тот самый тест на сравнение скорости джойна трёх таблиц в ФБ и в m$ sql, который тут недавно обсуждался. Можно ли FileSystemCacheThreshold тоже выводить в трейсе ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2011, 20:25 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
Таблоид, autoexec.bat не нужно выводить в трейсе ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2011, 20:36 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
hvlad, зачем тогда в ISQL стали выводить buffers ? не выводили бы вообще - не было бы вопроса. Хочется удобный вывод, чтобы всё было видно сразу, без лишних телодвижений. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2011, 20:52 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
Таблоид> Хочется удобный вывод, чтобы всё было видно сразу, без лишних телодвижений. Фигней не майся. В трейс нужно выводить то, что имеет прямое отношение к самому событию. Параметры конфига, как ты сам можешь догадаться, к нему отношения не имеют. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2011, 21:41 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
Еще вопрос + пожелание. 1) есть некая база (допустим, 192.168.0.1:/var/db/firebird/my_prod.fdb). есть также алиас к этой базе (у него имя = my_prod). Львиная доля ярлыков на рабочих местах усеров настроена так, что обращение к этой базе идет через алиас, т.е. "192.168.0.1:my_prod". Разработчики же стучатся к ней методом явного указания пути и файла. Так вот: надо указать в трейс-конфиге, чтобы при старте польз. сессии он отлавливал обращения как к файлу, так и к алиасу. Попробовал так: Код: plaintext 1. 2. 3. 4. 5. 6.
Пробовал еще вот так: Код: plaintext 1.
ВОПРОС. Как правильно указывать (перечислять) в секции <database> имя файла и его алиаса ? 2) идёт сессия, вывод направлен на экран. Часто желательно очистить экран, чтобы легче было отследить начало некоего "важного события", без выхода из трейса и выполнения cls с повторным запуском. Можно ли добавить некий "хоткей" для этого ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2011, 01:16 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
Таблоид 4. При включенном log_transactions в лог трейса попадут ВСЕ старты и завершения транзакций, в том числе и read only read committed. Можно ли добавить параметр, по которому будут отслеживаться только rollback'и (да и то не всех трн, а лишь тех, что длились свыше указанного в настройках порога, a`la time_threshold для продолжительности стейтментов) ?Алаверды к этому пункту (см стартовый пост). Можно ли фильтровать транзакции еще и по уровням изолированности и типам ? (к примеру, exclude read only read committed или include read write concurrency). Открыл только что трейс нашего продакшена, установив временно дефолтную database-секцию в .conf'e, и вижу "нечто": каждую секунду от аттачей (с невыключенных компов) создается и коммитится по 2-3 транзакции, все они read only read committed. Что это такое, еще буду выяснять. Но поскольку они не влияют на OIT - зачем они мне в логе ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2011, 01:24 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
ТаблоидВОПРОС. Как правильно указывать (перечислять) в секции <database> имя файла и его алиаса ?Проверяй свой шаблон, используя SIMILAR TO ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2011, 02:55 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
ТаблоидМожно ли добавить некий "хоткей" для этого ?Нет. fbtracemgr - тупая консольная утилита ибо таковой задумана и останется. Хотите сервиса - пользуйтесь другими утилитами. В том же ИБЕ есть базовая поддержка трассировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2011, 02:57 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
hvlad, еще вопрос (может, он и не по fbtracemgr, не знаю). Начинаю отслеживать что-то с выводом лога в файл, работа идёт под win-2000. Файл просматриваю в третьем окне. Вижу, что содержимое файла "отстаёт" от того, что реально должно быть, примерно на 3...4 Кб. Например, после завершения вот этих команд: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вот "хвост" того, что вижу в логе: Код: 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.
Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
ВОПРОС-1. Как сделать, чтобы лог сразу сбрасывался на диск ? Если в реестре винды надо что-то подкрутить, то в где ? ВОПРОС-2. Возможен ли "параллельный" вывод сообщений на консоль и в файл ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2011, 09:09 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
ТаблоидВОПРОС-1. Как сделать, чтобы лог сразу сбрасывался на диск ? Если в реестре винды надо что-то подкрутить, то в где ? CORE-3324 ТаблоидВОПРОС-2. Возможен ли "параллельный" вывод сообщений на консоль и в файл ?У нас вроде нет утилит с таким функционалом ? В принципе - возможно, но сейчас точно не до того. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2011, 11:38 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
hvladУ нас вроде нет утилит с таким функционалом ? В принципе - возможно, но сейчас точно не до того. А что, обязательно должны быть "наши" аналоги всех стандартных утилит? Для тех идиотов, которые неспособны воспользоваться tee/WinTee?.. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2011, 11:47 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
LI-V6.3.0.26084 Firebird 2.5, Classic. Есть в firebird.conf такой параметр: MaxUserTraceLogSize, default = 10 Mb. В комментариях указано, что при превышении логом этого размера трейс будет приостановлен до "прочтения интерактивным сервисом пользователя и удаления некоторых лог-файлов". Я его установил равным 1, после чего включил трейс. Лог быстро достиг размера 1 Мб и прёт дальше, никакой остановки нет. 2 hvlad : можно ли всё-таки подправить трейс, чтобы он по достижении пользовательским логом размера, который указан в MaxUserTraceLogSize, не останавливался, а переименовывал добавлением суффикса в формате yyyymmdd_hhmmss, после чего открывал новый файл и возобновлял в него запись новых данных ? PS. Объясню причину этой паранойи: мне нужно найти sql-операторы, которые выполнялись в OIT. У нас какая-то странная картина: то по 5-10 дней OAT-OIT=1, то вдруг совершенно дикие разницы по полтора-два миллиона, с утра и до ночного пылесоса. Причем, "набор высоты" происходит за каких-то 1-2 часа. Откуда могут у нас быть по 400-500 транзакций в СЕКУНДУ - пока не ведаю. Разработчики божатся, что никакие пакетные операции не выдают транзакции с такой частотой. Чтобы найти эти операторы, надо логгировать долго и много. Чтобы не загадить диск, хочу добавить в крон задание на упаковку "суффиксных логов" и отправку их мне в почту, с последующим удалением. Как только увижу "дикий зазор", буду поднимать архивы логов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 00:05 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
ТаблоидLI-V6.3.0.26084 Firebird 2.5, Classic. Есть в firebird.conf такой параметр: MaxUserTraceLogSize, default = 10 Mb. В комментариях указано, что при превышении логом этого размера трейс будет приостановлен до "прочтения интерактивным сервисом пользователя и удаления некоторых лог-файлов". Я его установил равным 1, после чего включил трейс. Лог быстро достиг размера 1 Мб и прёт дальше, никакой остановки нет.Это касается временных файлов, создаваемых сервером для ещё не прочитанной юзером инф-ции. Никакого отношения к файлам на клиенте оно не имеет. Таблоид 2 hvlad : можно ли всё-таки подправить трейс, чтобы он по достижении пользовательским логом размера, который указан в MaxUserTraceLogSize, не останавливался, а переименовывал добавлением суффикса в формате yyyymmdd_hhmmss, после чего открывал новый файл и возобновлял в него запись новых данных ?Нет. ТаблоидPS. Объясню причину этой паранойи: мне нужно найти sql-операторы, которые выполнялись в OIT. У нас какая-то странная картина: то по 5-10 дней OAT-OIT=1, то вдруг совершенно дикие разницы по полтора-два миллиона, с утра и до ночного пылесоса. Это у тебя OAT застрял и стоит на месте. Next в это время движется вперёд. ТаблоидПричем, "набор высоты" происходит за каких-то 1-2 часа. Откуда могут у нас быть по 400-500 транзакций в СЕКУНДУ - пока не ведаю. Разработчики божатся, что никакие пакетные операции не выдают транзакции с такой частотой. Чтобы найти эти операторы, надо логгировать долго и много.А потом OAT таки завершается и её новое значение становится намного больше застрявшего OIT. ТаблоидЧтобы не загадить диск, хочу добавить в крон задание на упаковку "суффиксных логов" и отправку их мне в почту, с последующим удалением. Как только увижу "дикий зазор", буду поднимать архивы логов.Тебе нужен аудит. Он как раз имеет такие настройки. См. log_filename и max_log_size в fbtrace.conf и AuditTraceConfigFile в firebird.conf ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 00:16 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
hvladТебе нужен аудит. Он как раз имеет такие настройки. См. log_filename и max_log_size в fbtrace.conf и AuditTraceConfigFile в firebird.confА вот в релнотах сказано:FB 2.5 RNAdministrator creates or edits the trace configuration file, sets its name via the AuditTraceConfigFile setting in firebird.conf and restarts Firebird. Later, the administrator could suspend, resume or stop this session without needing to restart Firebird. правильно ли понимаю, что для случая CLASSIC server'a достаточно просто выгнать всех усеров из проги, т.е. просто сделать gfix -shut и затем -online & ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 00:32 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
Таблоидправильно ли понимаю, что для случая CLASSIC server'a достаточно просто выгнать всех усеров из прогиДа. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 00:34 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
Операторы, выполняемые внутри автономных транзакций, в логе трейса не показываются: DDL: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 23:39 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
ТаблоидОператоры, выполняемые внутри автономных транзакций, в логе трейса не показываютсяНу так и отдельные операторы внутри процедуры\триггера тоже не показываются ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2011, 01:13 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
LI-V6.3.0.26083 (Classic) Из таблицы, содержащей 100 млн строк и 5 индексов (один ПК и 4 составных по 4 int-полям) выполняю удаление 1 млн строк. Подключен пользовательский трейс, вывод перенаправлен в лог. Удаление идёт больше минуты, при этом ВСЁ это время вижу в top'e, что fbtracemgr ощутимо грузит проц: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 29299 firebird 20 0 128m 6772 4576 S 46.5 0.0 0:51.11 fbtracemgr 29308 firebird 20 0 104m 45m 5352 R 38.2 0.1 0:22.75 isql Самое интересное, что: 1) в процессе выполнения в top'e (при сортировке по CPU_load desc)в первых строках видел fbtracemgr и isql - "моего" fb_inet_server'a там даже не показалось; 2) эта же загрузка (примерно 45-47%) не прекратилась и после того, как оператор удаления выполнился и в ISQL управление вернулось к подсказке. Это почему так ? PS. Содержимое конфига трейса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 21:07 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
PS. Забыл указать полный список процессов от user = 'firebird', которые вижу в top'e при работе трейса и "долгом запросе" к большой таблице: Код: 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. 37. 38. 39. 40. 41.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 21:13 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
ТаблоидLI-V6.3.0.26083 (Classic) Из таблицы, содержащей 100 млн строк и 5 индексов (один ПК и 4 составных по 4 int-полям) выполняю удаление 1 млн строк. Подключен пользовательский трейс, вывод перенаправлен в лог. Удаление идёт больше минуты, при этом ВСЁ это время вижу в top'e, что fbtracemgr ощутимо грузит проц: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 29299 firebird 20 0 128m 6772 4576 S 46.5 0.0 0:51.11 fbtracemgr 29308 firebird 20 0 104m 45m 5352 R 38.2 0.1 0:22.75 isql Самое интересное, что: 1) в процессе выполнения в top'e (при сортировке по CPU_load desc)в первых строках видел fbtracemgr и isql - "моего" fb_inet_server'a там даже не показалось; 2) эта же загрузка (примерно 45-47%) не прекратилась и после того, как оператор удаления выполнился и в ISQL управление вернулось к подсказке. а) В логе трейса только искомое удаление оказалось или куча параллельной активности от других коннектов тоже ? б) коннект в isql небось локальный ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 21:29 |
|
fbtracemgr: разные мелкие вопросы
|
|||
---|---|---|---|
#18+
hvladа) В логе трейса только искомое удаление оказалось или куча параллельной активности от других коннектов тоже ? б) коннект в isql небось локальный ?a) только аттач + каунт строк в ИБЭ (т.е. еще всего лишь 1 коннект, который сделал предварительный подсчет числа удаляемых строк). б) да, локальный... а что? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 21:34 |
|
|
start [/forum/topic.php?fid=40&fpage=41&tid=1561416]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
33ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 131ms |
0 / 0 |