|
|
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
hi all. Дано: новая база (alias = huge_noext), page_size=8K, FW = OFF, buffers=512K, LI-T3.0.0.30824, SuperServer. Изменённые параметры firebird.conf: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. В базе создаются мастер и деталь таблицы, связанные FK. Кроме того, на каждую таблицу навешено еще по 2 "простых" индекса. Запускаю скрипт, вставляющий большое число строк (2 млн в мастер таблицу и 200 млн в деталь): Код: 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. 88. 89. 90. 91. 92. askmon.sh Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. askmon30.sql Код: 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. Скрипт отрабатывает 20 раз, вот фрагмент его лога: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Этот лог далее затаскивается в эксель, из него удаляются лишние строки с заголовками и пропусками, после чего он упорядочивается по графам {MON_USER, DTS}. Затем добавляется графа diffWrites, в которую пишутся разности значений графы WRITES (это алиас столба MON$IOSTATS.mon$page_writes). Ну, и вот: диву даюсь. Получается так, что поток CACHE_WRITER'а пишет за каждые 10 сек по 60-80 тыс страниц. А основной поток, который инсертит в базу, пишет за то же время по 2...3 тысячи. Чем это объяснить ? (в аттаче - причёсанный эксельный лист; сравните там значения в графе diffWrites для групп строк с mon_user = cache_writer vs sysdba). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 12:47:17 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
Таблоид, а что именно тебе не нравится? Рабочий поток изменил страницу в кеше, пошел делать дальше свою работу, грязные страницы он писать на диск начнет только когда засрет весь кеш. А пока суть да дело, кешрайтер пишет грязные страницы сам, так что в кеше почти всегда остаются свободные буферы и рабочий поток не тормозится на ненужный I/O. Объем работы (с точки зрения CPU) у кешрайтера намного меньше, поэтому он успевает больше. А основной поток пока запись на страницу положит, пока две-три индексных страницы прочитает, пока ключ вставит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 13:00:11 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
dimitrОбъем работы (с точки зрения CPU) у кешрайтера намного меньше, поэтому он успевает больше. А основной поток пока запись на страницу положит, пока две-три индексных страницы прочитает, пока ключ вставит...Если так, то кешрайтер рано или поздно должен будет некоторое время сидеть сложа руки: он пишет в ДВАДЦАТЬ раз больше страниц, чем рабочий поток и должен когда-нить "догнать и перегнать Америку". Значит, я могу сейчас запустить мониторинг на 2-3 часа и увидеть в его отчете длительные периоды с diffWrites = 0 - так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 13:04:48 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
кешрайтер пишет ровно столько, сколько рабочий поток пачкает. Отдыхать он будет когда хотя бы четверть кеша станет доступной для повторного использования. Если он успеет писать быстрее, чем рабочий поток пачкать, то да - периодически кешрайтер будет простаивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 13:22:37 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
dimitrкешрайтер пишет ровно столько, сколько рабочий поток пачкает. Отдыхать он будет когда хотя бы четверть кеша станет доступной для повторного использования. Если он успеет писать быстрее, чем рабочий поток пачкать, то да - периодически кешрайтер будет простаивать.Какой интервал между снимками посоветуешь сделать, чтобы это увидеть ? Мну кажется, что 10 сек - слишком большой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 13:32:49 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
ТаблоидКакой интервал между снимками посоветуешь сделать, чтобы это увидеть ? Мну кажется, что 10 сек - слишком большой.Ты не теми единицами оперируешь :) Он может простаивать, например, по 1-10 мс между циклами записи - микроскоп бери :) Чего узнать-то хочешь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 14:11:52 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
hvladОн может простаивать, например, по 1-10 мс между циклами записи - микроскоп бери :) Чего узнать-то хочешь ?фигасе... про 1...10 мс - не знал. Это сильно меняет дело :-) А узнать хотел, как всегда, одно: что так тормозит добавление записей на странице 8К (да и на 16 К будет, наверное, то же самое). При том, что уже writes barrier = 0 и выставлен noatime. Осталось только data=writeback добавить, но это уже крайняк. Вот и решил в mon$ покопаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 14:26:24 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
Таблоид, можешь этот же тест повторить для классика ? Там нет cache writer'а, сравним статистику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 14:29:09 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
hvladможешь этот же тест повторить для классика ? Там нет cache writer'а, сравним статистику.Сейчас не смогу - заливка еще идёт. А обязательно ли для Classic'a ? Нельзя ли для SC ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 14:33:04 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
Таблоидhvladможешь этот же тест повторить для классика ? Там нет cache writer'а, сравним статистику.Сейчас не смогу - заливка еще идёт. А обязательно ли для Classic'a ? Нельзя ли для SC ?Нет, срочно сейчас - всё бросай ! Есс-но, можно и для SC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 14:39:51 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
hvladможно и для SC.Да, но там вопрос об интервале между запросами к монам - очень актуальный, в отличие от супера. Каким его задать ? PS. А сохраню-ка сюда еще и батничек, который генерит .sql-скрипт, выполняющий без переконнектов любое число таких запросов к mon$-таблицам, который показан выше. И с любой паузой между окончанием N-го запроса и началом (N+1)-го. То есть, если ввести вот это: Код: plaintext Код: 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. Вот этот батник (запускать на винде, копировать затем скрипт askmon.tmp на линух): mkaskmon.bat Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 15:00:57 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
Таблоидтам вопрос об интервале между запросами к монам - очень актуальный при одном рабочем коннекте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 15:11:19 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоидтам вопрос об интервале между запросами к монам - очень актуальный при одном рабочем коннекте?Про один коннект не могу пока сказать - проверить надо, какой там отклик будет при аналогичных вставках. А вот когда idx_under_load грузил, то там была видна сильная разница (в пользу SS). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 15:18:32 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
Сгенерил скриптик на 7200 итераций, с паузой 0.5 сек между окончанием текущей и commit + select следующей. Затем всё также вытряхнул в эксель, оставил там первые 7000 строк (иначе нельзя сюда приаттачить .rar). Далее провёл всё теже манипуляции со значениями в графе WRITES для CW. Может, он и отдыхал в какие-то моменты по 1...10 мс, не знаю. Но эксель показывает, что он всё время со следующим старанием РАБОТАЛ: 1) строк, в которых кол-во writes в диапазоне от 100 до 1000 - около 100; 2) от 1001 до 2000 - около 450; 3) от 2001 до 3000 - около 1000; 4) от 3001 до 3000 - около 1100; . . . 5) свыше 10'000 - около 700 строк. Значительная доля строк показывает, что CW передавал в кеш линуха от 6 до 9 тыс страниц каждые 500 мс. То есть, моменты отдыха этого потока если и были, то какие-то нечастые, ИМХО. Но главный вопрос в следующем. С базой работает только ОДИН аттач (в мониторинге - поток от sysdba). Разность значений writes для него на момент начала и окончания теста = ~1.4 млн. А разность значений writes для Cache Writer'a за эти же моменты времени составляет 40 млн. Я не могу осилить причину этого дифферента %-/ В аттаче - эксель для CW. В следующем посте - для рабочего потока от SYSDBA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 19:07:42 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
окончание предыдущего поста - см второй аттач, для рабочего потока от SYSDBA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 19:08:32 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
... а еще вопрос: если я начинаю вставку (скрипт см тут) в пустую базу небольшого числа строк (20'000 в tmain, 2'000'000 в tdetl) - то может ли поток CacheWriter'a иметь нулевое изменение статистики в mon$iostats.writes ? (см аттач) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 22:17:34 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
Таблоидскрипт см тутимелся в виду стартовый пост, вызов ХП с входным параметром = 20000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 22:19:44 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
отгадку можно найти в моих ответах выше. Пока рабочий поток не испачкает своими вставками 3/4 кеша, то кешрайтер не пошевелится писать что-либо на диск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 23:01:41 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
dimitrотгадку можно найти в моих ответах выше. Пока рабочий поток не испачкает своими вставками 3/4 кеша, то кешрайтер не пошевелится писать что-либо на диск.Да, но когда скрипт заканчивает свою работу commit'ом, кто-то же должен записать страницы на диск ? В отчете на момент после окончания скрипта значения writes для CW так и остаются прежними. И "кто" тогда передаёт данные в файловый кеш операционки из страничного кеша ФБ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2014, 00:53:46 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
Нескладуха какая-то со статистикой, КМК. 0) рестартовал ФБ, установил в database.conf на пустой базе нищенский кеш = 128 страниц; 1) запустил isql, выяснил ID его аттача; добавил в конфиг трейса фильтр на отлов событий только для этого attach_id; 2) запустил трейс; 3) запустил огромный скрипт, делающий без переконнектов снимки с мониторных таблиц и складывающий их в лог, с интервалом = 0.5 сек (пример его я приводил выше в этом топеге); 4) запустил на выполнение скрипт, добавляющий 20 тыс строк в tmain и 2 млн в tdetl: Код: plaintext 1. Далее смотрю статистику трейса: 99833 write(s) Код: 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. Вытряхнул лог мониторинга в эскель (см аттач), причесал его там. В итоге вижу в экселе, что дельта в графе writes между последними и первыми значениями: 1) для рабочего потока от SYSDBA: 99'907 - 5 = 99'902 - вполне объяснимое значение, близкое к данным трейса; 2) для Cache Writer'a: 4'124'841 - 0 = 4'124'841 страниц. Разница в 41 раз. Опять соотношение в 3..4 десятка раз. Чего он (CW) делал в 40 раз больше, чем поток-молотилка ?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2014, 01:44:44 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
Таблоид, тот, кто делает коммит, есс-но. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2014, 01:45:54 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
Ты с SC\CS сравнил те же действия ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2014, 01:48:51 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
hvladтот, кто делает коммит, есс-но.Это делает коннект-молотилка. "Кому" он передаёт грязные страницы - непосредственно файловому кешу, получается ? (раз CW сидит без дела) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2014, 01:50:35 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
hvladТы с SC\CS сравнил те же действия ?Нет пока... всё еще с SS "борьба" идёт. Завтра, надеюсь, смогу и к Вильяму нашему Шекспиру SC подступиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2014, 01:51:37 |
|
||
|
Вставка в индексир.таблицы: cache writer в 1 ед времени пишет в 20 раз > раб. потока
|
|||
|---|---|---|---|
|
#18+
Таблоид"Кому" он передаёт грязные страницы - непосредственно файловому кешу, получается ?Нет, он на деревню деду письма пишет. У тебя какие-то совершенно дикие представления о том, как всё устроено... где ты их только берёшь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2014, 01:55:41 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38530526&tid=1563962]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
262ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 533ms |

| 0 / 0 |
