|
|
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
hi all Грустная сага с дикими показателями в трейсе при не очень большой нагрузке ФБ - увы, продолжается. Итак. Жила-была база, тестовая. И накинулось на неё 50 молотилок, имитирующих OLTP (а дело происходило в FB 2.5.3 SC). И полезло в трейсе всякое неприятное: Код: 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. Код: plaintext А затем из него вытащены все строки с ненулевыми "pending request count" Код: plaintext Результат: Код: plaintext 1. 2. 3. 4. 5. Строкам лога, которые выведены в первом столбе, соотв-вуют вот эти вещи: Код: 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. ЗЫ. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 23:15 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
да, чуть не забыл :-) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 23:31 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидЧто вообще можно понять из того, что под спойлером ? "Обо что" там всё спотыкается ? ожидания на страничных блокировках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 00:06 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
dimitrожидания на страничных блокировкахИз "Большой Книги" (глава 40) следует, что вот это: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Как понять, что это за ресурс такой: это была страница с данными таблицы или индексов ? или генераторов ? У мну есть только три идейки на тему уменьшения числа этих конфликтов: 1) если драки за страницы с данными таблиц, то уменьшить размер страницы до 4К; 2) если драки из-за массового добавления возрастающих ID'шников в индекс, то делать вместо вызовов gen_id(g, 1) что-то другое (менять местами байты, как это сделано в орацле для reverse index'ов); 4) если драки из-за генераторов, то поменять алгоритмы и хапать пачки ID'шников вместо gen_id(g, 1). Есть ли еще методы ? зы. интим переписывание теста "с нуля" не предлагать! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 08:09 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидКак понять, что это за ресурс такой: это была страница с данными таблицы или индексов ? или генераторов ? IBSurgeonViewer и это не страницы генераторов, за исключением (возможно) страницы 77886. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2014, 10:16 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
dimitrи это не страницы генераторов, за исключением (возможно) страницы 77886.А правильно ли я понимать, что вот в этих строках: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 17:59 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
правильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 18:39 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
dimitrправильнотогда я в культурологическом кризисе... 1) сделал примерно 20 снимков ЛТ, с интервалом 5 сек. 2) выполнил временный лок базы для её копирования: nbackup -L cp oltp25.fdb oltp25.copy.fdb nbackup -N nbackup -F oltp25.copy.fdb 3) отпарсил логи ЛТ, выдрав из них только сведения о наличии ненулевых page request count'ов, и упорядочил новые данные по убыванию этих count'ов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. И вижу, что основная часть траблов относится к DP-страницам одной и той же таблицы (doc_data), с которой как раз не очень много возни. Также есть траблы с PP этой же таблицы. Но вот по индексным страницам проблем оказалось немного, 1 или 2. Что получается, есть смысл уменьшить страницу базы с 8 до 4К? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 18:56 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидЧто получается, есть смысл уменьшить страницу базы с 8 до 4К? Есть смысл не жать разблокировки страницы в которую уже кто-то пишет. Попробовать писать в незаблокированную. Или нужно обязательно в эту? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2014, 13:55 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
NickDeeТаблоидЧто получается, есть смысл уменьшить страницу базы с 8 до 4К? Есть смысл не жать разблокировки страницы в которую уже кто-то пишет. Попробовать писать в незаблокированную. Или нужно обязательно в эту? :) не жать не ждать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2014, 13:57 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
NickDeeЕсть смысл не жать разблокировки страницы в которую уже кто-то пишет. Для update/delete/select это невозможно. Для insert проверяли, результаты спорные: у меня до 30% ускорения, у Влада - 0. Патч в дерево не пошёл. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2014, 14:11 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
NickDeeТаблоидЧто получается, есть смысл уменьшить страницу базы с 8 до 4К?Есть смысл не жать разблокировки страницы в которую уже кто-то пишет. Попробовать писать в незаблокированную. Или нужно обязательно в эту? :)Речь идёт о физических страницах базы и низкоуровневых блокировках. Даже если бы все update & delete поменять на insert'ы, то последние всё равно будут стремиться влезть на первую незанятую страницу. Драки будут и за DP, и за PP. На странице размером 8192 байта может размещаться сотня записей этой таблицы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вроде бы не очень много, но выжимка номеров страниц с page_request_count > 5 (из лога fb_lock_print) + запрос по ним к IBSurgeon'у всё время говорят: проблема именно в этой таблице, и чаще упоминаются её data pages, а не PP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2014, 14:39 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
http://www.firebirdsql.org/manual/fbint-page-5.html data page: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. При insert: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. При update: создаём новую версию для записи, спинлочим запись, пишем номер текущей транзакции, пишем ссылку на новую версию, отпускаем лок. При delete: по типу update. При select: читаем только записи до dp.dpg_count, т.к. другие нам пригодиться при фетче не могут, т.к. явно были созданы позже и не подлежат считыванию (это если у нас курсор видит состояние базы на момент старта стэйтмента, а у нас оно вроде именно так). Т.е. лока вообще нет. Итого, лочить всю страницу при insert, update, delete и select не нужно. Но у нас есть сборщик мусора и всякие тулзы, и ради них лок придётся делать, многочитательский-однописательский. Тем самым операции с данными мешать друг-другу не будут. В целом как-то так :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2014, 18:47 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
NickDee, а теперь прикрути это к классику :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2014, 18:50 |
|
||
|
fb_lock_print -a: что там означают 'pending request count: N', когда N>0 ?
|
|||
|---|---|---|---|
|
#18+
у мну вообще тут д э бильная мыслишка родилась: создать вместо таблицы doc_data вьюху с тем же именем (дабы не перелопачивать весь код), и вьюха эта должна быть такой: Код: sql 1. 2. 3. 4. 5. А в триггере на insert для этой вьюхи делать вставку в ту real_table_doc_data_NN, куда фишка ляжет укажет 1 + mod(gen_id(. . .,1), 2) . И тем самым, модификации над одной и той же real_таблицей будут в три раза реже, чем сейчас. Такой вот типа "кластер" :-) Тока с запросами к этой вьюхе, чую, беда будет полная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2014, 19:20 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38721253&tid=1563401]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
174ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 442ms |

| 0 / 0 |
