|
|
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
up. Проверяю подключение клиента WI-2.5 к серверу LI-3.0, на котором пересоздана эта таблица (1 млрд строк). Машина сервера после этого была перезагружена (shutdown -r now). Таблица была создана под sysdba, в embedded-подключении (дабы быстрее) при этом не привилегированному юзеру с именем `u25` никаких прав на неё выдано не было - забыл про это. Затем подключился к базе по tcp, с виндовой машины, под юзером `u25`. Само подключение (появление подсказки в isql) выполнилось практически мгновенно, т.е. как и в обычных случаях. Далее ввёл запрос: Код: plaintext 1. Сразу после этого в логе трейса появилось: Код: plaintext 1. И только через 3 минуты в трейсе вылезло: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. А isql выплюнул соотв-щий облом: Код: plaintext 1. Как говорилось выше в этом топике, на "холодной базе" первый запрос (даже по индексу PK) будет выполняться долго из-за вычитки PP. Но ведь ДО начала этой вычитки FB проверяет мои права на запрашиваемый объект - не так ли ? А права эти живут в крохотных RDB$-таблицах. Проверка этих RDB$таблиц должна выполняться мгновенно. Тогда откуда лезут эти три минуты(!), чтобы дать в итоге облом по no permission for SELECT ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 01:24:10 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоид ЭКСПЕРИМЕНТ-2. В первом окне ввожу запрос к таблице `t` на выборку данных (не подсчет строк - а именно выборку полей). Во втором окне пытаюсь срубить деятельность окна_1 через Код: sql 1. Результат: ноль. Окно_1 будет работать, невзирая на все потуги окна_2. Срубить окно_1 можно только через delete from mon$attachments.особенность текущей реализации, к сожалению. Удалить (сиречь: остановить) можно только активный риквест. А в твоем случае он всегда опознается как неактивный (stalled), мы это уже обсуждали недавно. Я подумаю, что тут можно сделать .Кое-что действительно сделано. Но хотелось бы решить вопрос со скоростью реакции на delete from mon$statements "радикально и навсегда". Повторил этот эксперимент на "разогретой" базе. Запустил сначала isql в первом окне и ввёл там: Код: plaintext 1. 2. ФБ занялся сканированием индекса в поисках записи с id >= 123456789. Он делает это настолько медленно, что никакого вывода строк на экран не происходит даже в течение 10-15 секунд. Поэтому во втором cmd-окне можно неспешно: 1) запустить isql 2) ввести там: Код: plaintext Повторил эти действия 4 раза. Результат: окно-1 реагирует на delete from mon$statements (от окна-2) не сразу, а только через 20-30 секунд, а в последний раз - почти 4 минуты(!) trace Код: 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. Кажется, это как-то связано с тем, сколько времени прошло от момента старта select'a в окне-1 до момента ввода delete from mon$statements в окне-2. Есть подозрение, что чем дольше давать поискать окну-1 первую запись, тем дольше у него будет "отходняк" при получении команды обруба. В общем, таблица-миллиардник и на ФБ-3 продолжает оставаться "серьёзным игроком" :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 01:48:56 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
Да, и еще. Среди 1 млрд строк есть 12, у которых в поле `h`, заполнявшемся как hash(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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. Точнее сказать пока не могу - надо вытряхнуть данные. Пытался создать индекс по `h` - умерло: top показывал, что процесс firebird вообще ни хрена не делает, а isql что-то там пытается грузить, но как-то вяло. Сейчас просто натравлю запрос на извлечение по natural'у. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 09:26:33 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
Таблоидлибо uuid_to_char(gen_uuid()) способен сгенерить 12 дублей на 1 млрд, либо хэши от этих 36-символьных строк могут совпадать ввиду коллизий (что странно на такой длине текста).Второй вариант. Коллизии, и только они. Вот список 12*2 uuid-строк, по которым hash выдает одинаковые значения:HS1037847731177921477EA00D44E-64C9-48C0-8438-FA04AA662E051037847731177921477F3EDA604-DD22-449D-A5F2-6DB4204082F5112473669458128058212DB8574-AADC-45FA-A24B-CC4911CDC00F112473669458128058250F6FD32-7FEB-4E2A-A61C-5519467248A6116515253492760935BC4BB00D-8EA6-437F-B7EC-EBF25DF7D4F7116515253492760935D4DDAEA1-8E0A-4B5E-9D6C-E3874B83EB272389228281869342534585795-70B6-40F3-8859-B15851B2540A23892282818693425511DAF0B-FC44-4AB9-A8B3-CC6165897A0A261210683920379748E4622FF-9264-4285-8934-5B525CF2F9062612106839203797499CC7926-045F-40F2-A464-0AEFF07B52CF39144859051103730143AD095-6FEF-44E9-87D7-A135D24BC9E23914485905110373064BE5888-AE20-4218-A3A6-F492ACFAD28B4273141755562872243BF4105-5234-4662-903E-2EE9429E56A242731417555628722E5F4CCC6-4CE3-4301-BABE-14C83A58C8DB90726006275812495038D18A5B-46E5-4C1D-8D36-3180A280E75690726006275812495070979264-2CC6-4BBE-8D0F-A7213B07CA5691679789702124605138285431-2C6F-468B-B7CA-4A83F8666E1391679789702124605194BF2544-F47A-4209-B410-326597F1E5639609765703549069971D24B10E-EBE3-44EB-AA78-4A57167CD645960976570354906997736DA53E-4335-40E6-B879-D23218825FA5969133800131399768D4D0DAAF-0074-42F8-9487-08573F84EBD8969133800131399768FE7BF9D2-0755-425D-8554-234B26BDCBB8971045795196823170B115F1BB-6176-47AA-A7CE-60322918C472971045795196823170E7254E81-3D9B-48C2-9A65-AA27475B303BСтранно как-то это, на длине в 36 знаков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 10:08:10 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
ТаблоидТогда откуда лезут эти три минуты(!), чтобы дать в итоге облом по no permission for SELECT ? насколько я помню - запрос сначала полностью препарится, потом проверяются права. А препарирование включает в себя скан всех PP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 21:13:31 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
dimitrА препарирование включает в себя скан всех PP. (я и то помню это по тесту терабайтной БД). а вроде предполагались какие-то улучшения в этом плане? Я именно про скорость prepare. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 21:16:05 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
kdv, предполагались, но пока есть по ним некоторые сомнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 21:22:50 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоидТогда откуда лезут эти три минуты(!), чтобы дать в итоге облом по no permission for SELECT ? насколько я помню - запрос сначала полностью препарится, потом проверяются права. А препарирование включает в себя скан всех PP.Погоди-ка... вот есть запрос: select ляляля from тратата1 join тратата2 on ... Разве нельзя на стадии prepare сразу же вытряхнуть имена объектов (тратата1, тратата2), к которым хотят лезть, и тут же, до всяких там PP-вычиток, проверить права на них ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 21:45:26 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
Таблоид, это все делается на стадии препаре, просто в разные фазы. Простого парсинга тут недостаточно, т.к. надо проверять весь граф поднятых запросов зависимостей. Да и вообще, не получается там по-другому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 21:55:51 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
dimitrэто все делается на стадии препаре, просто в разные фазы. Простого парсинга тут недостаточно, т.к. надо проверять весь граф поднятых запросов зависимостей. Да и вообще, не получается там по-другому.А просвяти, плз: если запрос содержит обращения к 10 объектам БД, то что будет происходить при prepare: 1) парсер будет сначала вытряхивать одно имя за другим, НЕ проверяя права на них, до тех пор, пока не "распознает" 10-е имя; и только после получения 10-го имени начнётся проверка прав либо 2) парсер вытряхнет имя_1, затем тут же будут проверены права на него; дальше, если права есть, парсер вытащит имя_2 итут же будут проверены права на имя_2, и т.п. - ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 21:59:54 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
Таблоид, составляется весь список и потом проверяется оптом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 22:01:33 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
dimitrсоставляется весь список и потом проверяется оптомОК, с этим понятно. Но вернусь к первому вопросу: вот когда в запросе есть только 1 объект - почему для препарирования запроса надо лазить по всем PP ? Чем это вызвано ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 22:06:40 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
Таблоидпочему для препарирования запроса надо лазить по всем PP ? Чем это вызвано ? склероз у тебя, хотя dataaccesspaths ты вроде неоднократно читал. по PP сервер вычисляет кардинальность таблицы, т.е. сколько там может быть записей (теоретически). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 22:09:07 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
kdvТаблоидпочему для препарирования запроса надо лазить по всем PP ? Чем это вызвано ? склероз у тебя, хотя dataaccesspaths ты вроде неоднократно читал. по PP сервер вычисляет кардинальность таблицы, т.е. сколько там может быть записей (теоретически).не-е, это я помню! У мну вопрос простой: зачем он начинает считать "скока вешать граммов" до того, как поймёт, имеет ли он право вообще трогать сей товар! Почему нельзя сначала в rdb$-таблицы полезть и проверить, есть ли права на соотв-щую таблицу у того, кто её "хочет" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 22:13:22 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
ТаблоидУ мну вопрос простой: зачем он начинает считать "скока вешать граммов" до того, как поймёт, имеет ли он право вообще трогать сей товар! Почему нельзя сначала в rdb$-таблицы полезть и проверить, есть ли права на соотв-щую таблицу у того, кто её "хочет" ? нет, ты перескакиваешь с вопроса на вопрос. Prepare строит план и проверяет права. Зачем Prepare считывает PP? Чтобы узнать кардинальность таблиц и построить план запроса. Можно отделить в Prepare построение плана от проверки прав? Ответ тут 14629558 Увы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 22:15:41 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
kdvМожно отделить в Prepare построение плана от проверки прав? Да фиг с ним, отделением. Таблоид-то спрашивает про очерёдность. Права проверяются на все объекты, задействованные во всех возможных ветках всех возможных планов. Если права на операцию нет, то проверка на это, произведённая чуть раньше (при добавлении объекта в список и граф) и выкинувшая исключение, сэкономит кучу времени. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 22:20:29 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
kdvPrepare строит план и проверяет права.Если сначала строится план, и только после проверяются права, то выглядит это как-то... странно! Будешь ли ты оценивать время движения по платной дороге, не выяснив, есть ли у тебя хотя достаточно бабла в кармане для оплаты ? kdvЗачем Prepare считывает PP? Чтобы узнать кардинальность таблиц и построить план запроса.Да понимаю я это, разумеется. kdvМожно отделить в Prepare построение плана от проверки прав? Ответ тут 14629558 Увы.к сож-ю, ответ ДЕ не прояснил мне моцк:dimitrПростого парсинга тут недостаточно, т.к. надо проверять весь граф поднятых запросов зависимостей. Да и вообще, не получается там по-другому. Ну, подняли граф зависимостей, там 10 объектов. Что мешает сначала выяснить права на них, немедленно выдавая отказ в работе при отсутствии хотя бы одного из прав, а затем вычитывать PP ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 22:27:26 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
Тут еще один таракан на тему скорости вылез. Пересоздал базу с нуля, поставил в ней FW = OFF, добавил кеш до 16384. Создал таблицу t(id int, s char(36)); Добавил в эту таблицу свой любимый млрд строк, поле `s` генерил через uuid_to_char(), в поле id записывал gen_id(g, 1). Добавил индекс: create index t_s on t(s); commit; А теперь хочу всё таки еще раз выяснить: нет ли сдублированных значений в `s`. И делаю запрос: Код: sql 1. 2. 3. Он молотил два часа и было нгепонятно, закончится это когда-нить или нет. Я срубил его и увидел по трейсу, что правильно сделал (см статистику!): Код: 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. Товарищи! "Чё-то не того!" 632 тыс записей обмолочено за 6900 сек - это что же получается-то ?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 00:24:06 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
PS. Добавил в условие join'a предыдущего запроса "дёргание" генератора, чтобы в другом окне хотя бы видеть скорость изменений: Код: plaintext 1. 2. Результат: ужасный кошмар. За полчаса обмолочено менее 180 тыс строк: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. И типичная картина из top'a в это время (да, я понимаю, что 4 Гб памяти мало - но пока это всё, что есть; но с серваком работаю я один): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 00:31:13 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
Таблоид, индекс T_S какого размера, в страницах? 1264903 read(s) как бы намекает, что он тупо не влезает в кэш, а значит читается каждый раз, с диска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 01:59:34 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
kdvиндекс T_S какого размера, в страницах? 1264903 read(s) как бы намекает, что он тупо не влезает в кэш, а значит читается каждый раз, с диска.Индекс весит 9.1 млн страниц. Не понимаю, что тут фатального: "не влезает в кеш". В пром. системах полно таблиц-монстров, индексы которых не влезают в кеш - но ворочаются же. gstat -r Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 09:10:25 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
Таблоид, Ребята, миллиарды записей -- это не для таких СУБД. Не для традиционных. Только columnstore. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 10:07:06 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
ТаблоидЧто мешает сначала выяснить права на них, немедленно выдавая отказ в работе при отсутствии хотя бы одного из прав, а затем вычитывать PP ??Попытка выполнить запрос не обладая привилегиями почти наверняка "криминал", встречается относительно легитимных запросов крайне редко, ну допустим 1%, ради одного процента шулеров будешь перетряхивать всю проверку? Хотя с другой стороны очень легкий способ вызвать отказ в обслуживании. Вот ради превентивных мер против DOS может и стОит перетряхнуть? MasterZivРебята, миллиарды записей -- это не для таких СУБД. Не для традиционных. Только columnstore.Для или не для, но многие проблемы можно поймать только нагрузочным тестом превышающим рабочую нагрузку. Спрашивается нахрена котлы проверять давлением превышающим рабочее? вот и миллиард примерно для того же самого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 23:48:49 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
0xFFIvan_PisarevskyСпрашивается нахрена котлы проверять давлением превышающим рабочее? вот и миллиард примерно для того же самого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 00:37:01 |
|
||
|
Его Величество Миллиард (эксперименты с таблицей в 10E9 строк)
|
|||
|---|---|---|---|
|
#18+
Ivan_PisarevskyХотя с другой стороны очень легкий способ вызвать отказ в обслуживании.я пока вижу одно: таблица в 1 млрд записей очень трудно ворочается. Она постоянно вытесняется на диск и "вычитка" PP становится явно узким местом. И даже select first 1 из неё запросто может стать гемором для бедного сервера. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Trace: ##### Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 01:36:29 |
|
||
|
|

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

| 0 / 0 |
