|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Наткнулись на то, что при выборке данных, используя функцию substr инфоримкс выдает разные данные. Для примера. Берем таблицу, а которой более 40 млн. записей. Запускаем две сессии dbaccess. Почти одновременно запускаем два одинаковых запроса и сравниваем данные. Результат ошеломляющий на 250000 тысячи строк, расхождение от 3000 до 5000. Выполняемые запросы: Один тип запроса Код: sql 1. 2. 3. 4. 5. 6. 7.
второй тип запроса Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Все время расхождение во втором поле. Опробовали на всех версиях 11.50 и 11.70. Результат тот же. Неужели информих при большом количестве сессий (обращение к одной и той же таблицы) ведет себя не корректно. Поле ID имеет тип данных INT, и это поле является первичным ключем. Функция REPLACE выдает в процентом отношении еще больше ошибок. Развернул последний бэкап и повторил опыт. РАСХОЖДЕНИЙ НЕТ. На сервере было 2 моих сессии. На «боевом» серверах от 100 до 500 активных сессий. Файлы сверял программой beyond comare на винде. Есть у кого какие-либо предположения? Поля разделены "|". Сначала идет поле ID, затем SUBSTR(u_id), u_id. Затем через символ ";"данные второго запроса. Жирным выделил то, что должно отображаться во второй колонке. 40205784|0402057848|5005065095936 04020578487 ; 40205784|0402799069|5005065095936 04020578487 40205796|0402057961|5005183932754 04020579616 ; 40205796|0402799250|5005183932754 04020579616 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2013, 14:21 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Может я не совсем внимательно прочитал чего Вьі хотели добиться. Но для получения идентичности вьіборок нужен хотя бьі order by по первичному ключу. Без него сервер отдаст те первьіе 250000 какие ему будут удобньі в данньій момент. P.S. Вчитался внимательнее, ума не приложу, что ето может бьіть. Какого типа u_id ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2013, 14:27 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Извините плиз, что коряво написал. данные отсортированы по ID. Когда я сравниваю два запроса поля ID и U.ID совпадают, а в поле SUBSTR(u.id,14,10) идет расхождение. Т.е. я делаю вывод, что СУБД или "криво" работает, или я что-то не понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2013, 14:51 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Забыл написать u_id VARCHAR(24) not null ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2013, 15:05 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Интересно, как ведут себя a.u_id[14,24] или substring ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2013, 17:08 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
функции substr and substring ведут себя одинаково - плохо. Во вложенном файле сравнение двух запросов (вырезал кусок) Правильно ведет себя a.u_id[14,24]. Но я завтра потестирую, выгружу раз 10 и сравню результат. Но почему substr and substring "врут" примерно на 5_ти процентах строк? Хочу еще раз повторить, если эти запросы гонять на тестовой базе (кроме меня никого нет), то расхождений нет. Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2013, 18:24 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Вчера повторил тестирование, запуская два одинаковых запроса одновременно. Запускал 5 раз. Результат тотже. Идет расхождение по полям, где работают функции substr и substring. Количество расхождений не постоянно и варируются от 3000 до 5000 строк. Это "баг" информикса? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2013, 10:38 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Очень похоже на баг. Классический случай для обращения в саппорт. Баги в Substr и в Substring-е встречались и в более свежих версиях, правда в более запутанньіх случаях. Информация сугубо через Google, так как у меня только 10-я версия и то уже в архиве. Для спасения чести информикса, запрос делается в DIRTY READ ? Информация, отбираемая по запросу, меняется в процессе? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2013, 11:43 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Спасибо большое. Поддержка есть, будем обращаться в саппорт. Но все равно не понятно. Почему на восстановленном бэкапе при одновременном запуске одинаковых запросов расхождений нет, а в базе куда подключены за сотни пользователей расхождения есть? При этом хочу сказать, что во время проведения опытов, в эту таблицу не было не INSERT, ни UPDATE. Для спасения чести информикса, запрос делается в DIRTY READ ? Нет не стоит. Информация, отбираемая по запросу, меняется в процессе? Теоритически возможно, но вероятность слишком мала (стремится к нулю). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2013, 13:33 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Странно все это. Хотелось бы увидеть вывод вместе с самим полем u_id Код: sql 1. 2. 3. 4.
[/quot] Также неплохо было бы узнать значение конфигурационного параметра SQL_LOGICAL_CHAR и переменных окружения DB_LOCALE и CLIENT_LOCALE. Еще интереснее, что скажет саппорт. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2013, 19:12 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Сергей Б, попробуйте предварительно загрузить во временную таблицу а потом уже выгрузить в файл: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Попробуйте поменять каталог выгрузки (на всякий случай :), а вдруг он битый Попробуйте запустить oncheck на таблицу paymtempl. И обязательно отпишитесь о результатах, если это действительно баг, то очень серьёзный, все ещё оставшиеся пользователи Informix должны быть в курсе. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2013, 19:36 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
to victor16 1. Выгрузка данных запроса в новый каталог. Обратите внимание на овал, выделенный синим цветом. Это количество не совпадений. Выгрузка осуществляется на юниксовую машину, затем эти файлы я копирую на винду и там эти файлы сравниваю. Код: sql 1. 2. 3. 4. 5. 6. 7.
2. Выгрузка в темповые таблицы и сравнение результатов. Выгружал 5 раз и сравнивал результаты. Расхождений нет. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
3. При анализе расхождений мы пробовали и такую конструкцию Код: sql 1. 2. 3. 4. 5. 6.
В таком выражении тоже расхождений нет. Вывод: расхождения идут во время фетча (что-то происходит, но не известно что и из-за чего). Проверка таблицы и ее индексов ошибок не выдала $ oncheck –cD paymtempl TBLspace data check for paymtempl $ oncheck –cI paymtempl А что молчат представители IBM, я обращаюсь к GVF112GVF? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 15:21 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Сергей БВывод: расхождения идут во время фетча У вас похоже, ко всему прочему и ошибка проявляется случайным образом, судя по листингу. Еще один вопрос, структура таблицы менялась в последнее время? Если менялась, был ли inplace-alter? Если был inplace-alter, какое количество версий у этой таблицы? Если был inplace-alter, не было ли после этого перехода на новую версию Informix? Попробуйте сделать копию таблицы в другом db-пространстве и поработать с ней, будет ли повторяться ошибка? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 18:33 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
DaugavaОчень похоже на баг. Классический случай для обращения в саппорт. Баги в Substr и в Substring-е встречались и в более свежих версиях, правда в более запутанньіх случаях. Информация сугубо через Google, так как у меня только 10-я версия и то уже в архиве ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 19:19 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Сергей БДля спасения чести информикса, запрос делается в DIRTY READ ? Нет не стоит. При обращении в саппорт предоставляйте всю информацию. Нам вы ответили, что уровень изоляции не DIRTY READ, но указали, какой же он всё таки. Сергей БИнформация, отбираемая по запросу, меняется в процессе? Теоритически возможно, но вероятность слишком мала (стремится к нулю). Очень существенный момент. Вы всё-таки сомневаетесь? Добавьте триггер на обновление с логированием изменения поля. Или включите аудит на обновление. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 19:23 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Пардон, опечатался. Правильно: АнатоЛойНам вы ответили, что уровень изоляции не DIRTY READ, но НЕ указали, какой же он всё таки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2013, 19:24 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
To Victor. Структура менялась, но не значительно (нашел июльскую схему БД и сравнил структуры таблиц). Добавлялись только ограничения типа NOT NULL, DEFAULT. Поле, по которому идет SUBSTR, точно не менялось. inplace-alter при мне не было. Вот что выдало oncheck –pT:paymtempl Data (Home) 0 ---------- Total Pages 87798 Home Data Page Version Summary Version Count 0 (current) 0 Попробуйте сделать копию таблицы в другом db-пространстве и поработать с ней, будет ли повторяться ошибка? К сожалению не возможно сделать копию этой таблицы (17 Гб) в другом dbspace (нет места на диске). Могу только создать такую же таблицу и закачать туда данных процентов 60). Попробовать? АнатоЛой. Уровня изоляции вообще никакого не стоит. Данные в таблицу добавляются, но только ночью, примерно с часа до 3. Не много истории и дополнений для ясности. Когда заметили, что при выборке данных выдаются разные данные (было замечено 2 раза за полгода бухгалтерией). То сначала начали проводить эксперимент на реплике. Затем перешли на архивный сервер, т.к. там меньше активных сессий и он меньше нагружен. (На архивную базу данные переливаются с часа ночи до 3 по всем таблицам за 1 день). Так что во время тестирования данные не изменялись (для АнатоЛой). Версии информикса 11.50.FC4 (бой) и 11.70.FC6(архив). Какие будут еще предложения? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2013, 16:22 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
1. Таки оформить обращение в саппорт. 2. Пока саппорт пытается вам помочь, использовать обходное решение. Варианты: а) вместо SubStr использовать [<с>, <по>]; б) если это не реально - пойти на повышение сложности обработки: создать и использовать собственную функцию. Варианты: б.1) делать обрезание двумя способами (substr, substring). Сравнивать результаты, в случае расхождения, делать повторно допустимое число раз - вдруг ошибка зависит от момента времени выполнения; Обратил внимание, что в вашем примере сбоит то одна функция, то другая, но не видел строк, где сбойнули на одной записи обе - можете проверить у себя на полной выборке :). б.2) написать свою функцию вырезания, работающую посимвольно. .... П.С.: 3. просьба не дать умереть от любопытства и информировать о состоянии проблемы :). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2013, 18:50 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
АнатоЛой б.2) написать свою функцию вырезания, работающую посимвольно. .... Например, вот отсюда : Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2013, 18:55 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Спасибо. Как временное решение будем использовать Код: sql 1.
Лично у меня нет возможности обратиться в саппорт. Тот кто знает "явки и пароли" временно не доступен. Буду вас держать в курсе в при любом раскладе. "Баги"не только в функциях substr and substring. Если применить функцию replace, то процент ошибочных данных возрастает чуть ли не в 2 раза больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2013, 15:23 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Сергей БКак временное решение будем использовать Код: sql 1.
Мне почему-то кажется, что проблема не в самом substr(), а в том, как эта функция обрабатывает тип varchar. Неплохо было бы таки узнать значения конфигурационного параметра SQL_LOGICAL_CHAR и переменных окружения DB_LOCALE и CLIENT_LOCALE. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 10:38 |
|
Странное поведение Informix при работе с текстовыми функциями.
|
|||
---|---|---|---|
#18+
Извините за опечатку. Как временное решение будем использовать Код: sql 1.
настройки 11.70.FC6 SQL_LOGICAL_CHAR off Код: sql 1. 2. 3.
настройки 11.50.FC4 нет такой настройки в файле onconfig SQL_LOGICAL_CHAR Код: sql 1. 2. 3.
Виктор, я сильно сомневаюсь, что это происходит из-за поля, которое имеет тип varchar. Я в предыдущих сообщениях описывал, что если брать статическую БД (нет ни одного пользователя, кроме моих 2-3 сессий), то эти строковые функции работают без ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 13:35 |
|
|
start [/forum/topic.php?fid=44&msg=38507085&tid=1607000]: |
0ms |
get settings: |
17ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
25ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
397ms |
get tp. blocked users: |
0ms |
others: | 351ms |
total: | 802ms |
0 / 0 |