|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
Приветствую знатоков и разработчиков! Последние пару лет занимаюсь вопросом перехода на 3-ю версию с 1.5. Многое уже прошел. Но вчера выпал в осадок от новой проблемы. И даже не представляю как её обойти. Проверял на: WI-V4.0.0.2496 Firebird 4.0 WI-V3.0.7.33374 Firebird 3.0 Тестовая таблица: Код: plsql 1. 2.
Запускаю в IBExpert-те блок: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
и получаю удивительный результат: ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 10:48 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
В полуторке всё корректно работало: ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 10:49 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
ggreggory, в одном случае блок, в другом процедура. наверняка есть еще масса ньюансов, о которых автор не договаривает ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 11:14 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
ggreggory, полную статистику посмотри, там должно быть 10 insert и 9 backout. И это правильно. 1.5 работает не корректно в этом плане. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 12:27 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
pastor ggreggory, в одном случае блок, в другом процедура. наверняка есть еще масса ньюансов, о которых автор не договаривает Во-первых, в полуторке не было execute block, поэтому для неё приведен пример с процедурой. Во-вторых, приведенную процедуру можно запускать и в FB3 и FB4 - результат аналогичный, как и для execute block. В-третьих, я ничего не договариваю, все исходные данные в исходном топике - таблица+запрос. Можете сами запустить у себя и проверить. hvlad ggreggory, полную статистику посмотри, там должно быть 10 insert и 9 backout. И это правильно. 1.5 работает не корректно в этом плане. Допустим, а как отличить backout инсертов от backout-ов update-ов? В реальном, а не тестовом примере могут быть и триггеры, которые делают много чего, и внешние ключи, которые делают каскадные изменения. Вы не когда не получите по формуле 10-9=1 число реально добавленных записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 13:20 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
ggreggoryВы не когда не получите по формуле 10-9=1 число реально добавленных записей. Для числа реально добавленных записей используется isc_dsql_sql_info(), а не isc_database_info(). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 13:28 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
12.08.2021 13:28, Dimitry Sibiryakov пишет: > Для числа реально добавленных записей используется isc_dsql_sql_info(), а не isc_database_info(). с какой версии? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 13:43 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov ggreggoryВы не когда не получите по формуле 10-9=1 число реально добавленных записей. Для числа реально добавленных записей используется isc_dsql_sql_info(), а не isc_database_info(). Тоже фигня - средняя температура по больнице. Возвращает общие счётчики - удалили, добавили, изменили, а где??? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 13:48 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
12.08.2021 13:48, ggreggory пишет: > Тоже фигня - средняя температура по больнице. Возвращает общие счётчики - удалили, добавили, изменили, а где??? ты ж в неё хендл стейтмента передаёшь на вход. а, ты имеешь в виду раскладку по таблицам... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 13:51 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
ggreggory Допустим, а как отличить backout инсертов от backout-ов update-ов? ggreggory Вы не когда не получите по формуле 10-9=1 число реально добавленных записей. Рантайм статистика показывает все действия, выполненные движком, а не их "полезный" результат. И если 1.5 показывала не всё, то это её проблемы. Правильный инструмент уже показал ДС тут 22358628 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 13:51 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
ggreggory Dimitry Sibiryakov Для числа реально добавленных записей используется isc_dsql_sql_info(), а не isc_database_info(). Тоже фигня - средняя температура по больнице. Возвращает общие счётчики - удалили, добавили, изменили, а где??? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 13:53 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
ggreggory Рантайм статистика показывает все действия, выполненные движком, а не их "полезный" результат. И если 1.5 показывала не всё, то это её проблемы. А зачем мне нужно знать что там делает движок? Для меня движок это чёрный ящик, который как раз и делает полезную работу. И если он предоставляет мне статистику, то эта статистика должна соответствовать проделанной работе. А что для этого пришлось сделать серверу мне не интересно. hvlad ggreggory пропущено... Тоже фигня - средняя температура по больнице. Возвращает общие счётчики - удалили, добавили, изменили, а где??? Конечная цель - портирование кода с 1.5 на 3.0. Много где задействованы счетчики isc_database_info. Чаще всего это выводы информационных сообщений наподобие того, как сделано в IBExpert-е. Сейчас все сообщения будут кривыми, также как и в IBExpert-е они кривые. Но в некоторых местах я встречал и проверки, наподобие: если после запроса кол-во вставок не равно тому-то то "внутренняя ошибка, стоп машина". Проверки это нормально, это повышает надежность работы. Но чтобы понять объем проблемы, надо делать инвентаризацию всего кода на предмет использования счетчиков, на это нужно время. И неужели вы считаете нормальной выдаваемую программами, тем же IBExpert-ом, статистику??? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 14:18 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
ggreggoryв некоторых местах я встречал и проверки, наподобие: если после запроса кол-во вставок не равно тому-то то "внутренняя ошибка, стоп машина". Видимо, человек, их вставивший, был не в курсе, что такие проверки, основанные на isc_database_info() работают только в однопользовательском режиме. Их не портировать надо, а выкашивать как саботаж и провокацию. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 14:23 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov а выкашивать как саботаж и провокацию. Ну не знаю, не знаю... в классике FB1.5 работало, иначе за много лет где-нибудь да у кого-нибудь, да вылезло. Проверки для того и делаются, чтобы вылазить в неожиданных местах. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 14:28 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
ggreggory А зачем мне нужно знать что там делает движок? ggreggory Для меня движок это чёрный ящик, который как раз и делает полезную работу. И если он предоставляет мне статистику, то эта статистика должна соответствовать проделанной работе. ggreggory А что для этого пришлось сделать серверу мне не интересно. ggreggory Конечная цель - портирование кода с 1.5 на 3.0. Много где задействованы счетчики isc_database_info. А что тебе покажет твоя "правильная" программа, если триггер на insert в таблицу запустит действия, приводящие к куче ins\upd\del в той же таблице ? Всю жизнь для records affected использовался isc_dsql_sql_info() это даже в изначальном IBX было, iirc. ggreggory Но чтобы понять объем проблемы, надо делать инвентаризацию всего кода на предмет использования счетчиков, на это нужно время. ggreggory И неужели вы считаете нормальной выдаваемую программами, тем же IBExpert-ом, статистику??? Просто нужно остыть и разобраться с инструментами. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 14:29 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
ggreggory в классике FB1.5 работало только в классике оно и могло работать ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 14:34 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
джентльмены! я конечно дико извиняюсь, но человеку нужно совсем не то, что вы ему хором советуете. он хочет получить раскладку по таблицам - что, куда, и сколько. а предлагаемый isc_dsql_sql_info может выдавать только суммарные значения (инсертов, делитов и т.д.) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 14:46 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
Мимопроходящий оно хочет получить раскладку по таблицам - что, куда, и сколько. Мимопроходящий а предлагаемый isc_dsql_sql_info может выдавать только суммарные значения (инсертов, делитов и т.д.) Если каждая операция - отдельный оператор - всё будет работать. Если же операция является кучей операторов (например, процедура), то получим контроль кучи операторов, а не то, что хотели. Если вопрос настолько принципиален, то нужно после каждого оператора в процедуре проверять ROW_COUNT. Или отказаться от процедур так, где всё так строго и проверять на клиенте records affected. PS Нет волшебной таблетки (есть только волшебный пендель) - такова селяви ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 14:55 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
Мимопроходящийоно хочет получить раскладку по таблицам - что, куда, и сколько. Это ему надо PerformanceInfo, а оно наружу не торчит, только в трассировке. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 14:56 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
наружу торчит в мониторинге. Но это дорого :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 14:59 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
hvlad Всю жизнь для records affected использовался isc_dsql_sql_info() это даже в изначальном IBX было, iirc. используется в TIBSQL в property RowsAffected. как минимум с IBX4.2 (D4/D5). но как и многое у Джефа, используется таки через "привычный интерфейс". ну да хрен с ним, с Джефом. меня интересует другое: ни в одном API Guide (IB5, IB6, IB XE, IB 2017) нет упоминания isc_info_sql_records. сильно подозреваю, что это не единичное "белое пятно". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 15:42 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Мимопроходящийоно хочет получить раскладку по таблицам - что, куда, и сколько. Это ему надо PerformanceInfo, а оно наружу не торчит, только в трассировке.Там всё равно будет 10 insert + 9 backout ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 15:56 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
isc_database_info - это очень крутой инструментарий в 1.5, хоть оказывается и работает нормально только в classic-e (не знал). Например, ты удаляешь запись из таблицы и сразу можешь понять, чего каскадно это удалило-зацепило, сообщить юзеру. А он уж пусть думает, "а может не стоит удалять-то". В полуторке, правда, есть ограничение, кажется максимум 40 таблиц можно получить из статистики. Это мало, но можно добавлять фразу типа "...и где-то что-то ещё изменилось", если видишь, что лимит достигнут. В таблицах мониторинга тоже backout в одной куче - и добавления, и удаления. Сложили лошадь с коровами - записали в backout. Ценность показателя сомнительна. hvlad Если же операция является кучей операторов (например, процедура), то получим контроль кучи операторов, а не то, что хотели. Да нет тут кучи, нет процедур, зачем? - даже обычный одинарный delete, один-единственный может вызвать кучу изменений, о которых хотелось бы знать. isc_dsql_sql_info тут что мёртвому припарка. И да, ROW_COUNT - это немного из другой оперы, из PSQL. Вряд ли там детализация нужна. hvlad А что тебе покажет твоя "правильная" программа, если триггер на insert в таблицу запустит действия, приводящие к куче ins\upd\del в той же таблице ? Конечно надо с умом подходить, понимать, где можно это использовать, где нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 20:37 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
ggreggory Например, ты удаляешь запись из таблицы и сразу можешь понять, чего каскадно это удалило-зацепило, сообщить юзеру. А на койчёрт юзеру знать, что было каскадом удалено 100500 записей, а не 300400 ? А на кой ему знать имена таблиц и полный их перечень ? А какая ему разница - удалило или обновило ? А если оно что-то вставило и сразу удалило - юзер тоже должен в этом разбираться ? ggreggory Ценность показателя сомнительна. ggreggory hvladЕсли же операция является кучей операторов (например, процедура), то получим контроль кучи операторов, а не то, что хотели. Да нет тут кучи, нет процедур, зачем? - даже обычный одинарный delete, один-единственный может вызвать кучу измененийЭто и есть та самая куча, о которой я писал. Не важно, насколько явно она получается. ggreggory Конечно надо с умом подходить, понимать, где можно это использовать, где нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 20:48 |
|
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
|
|||
---|---|---|---|
#18+
hvlad, +1, я тоже в недоумении. В любой нормальной системе юзер видит совсем не то, как это организовано в виде таблиц в БД и всякого. И ему эта посторонняя информация вообще незачем. Ну вот вставил он 1 запись, и ему система сообщает - вставилась 1, обновилось 5, и удалилось 3. И ... что??? Это же не он так придумал, а разработчик БД. И разработчику виднее, что и где должно обновляться. p.s. и вообще я про такую дичь слышу в первый раз. именно про выдачу этой информации в клиентском приложении. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2021, 21:11 |
|
|
start [/forum/topic.php?fid=40&msg=40090358&tid=1559963]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 277ms |
total: | 421ms |
0 / 0 |