powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Загадка Informix 12
38 сообщений из 38, показаны все 2 страниц
Загадка Informix 12
    #38464866
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDS 12.10.FC1

Создаем:
Код: sql
1.
2.
3.
create table _aaa (id serial, name varchar(32));

create table _bbb (id serial, name varchar(32));



Вставляем:
Код: sql
1.
2.
3.
insert into _aaa (name) values ('ABCDEFGHIJKLMNOPQRUVWXYZ');

insert into _bbb (id, name) values (200000,'QWERTYUIOPASDFGHJKLZXCVBNM');



Выполняем в dbaccess:
Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;



Получаем:

id name id_1 name_1
1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL

Чешем репу (с) :)
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38464942
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47, Стоп это я неправильно упростил! Здесь норм Сейчас перепишу.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38464976
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще разок

Создаем:
Код: sql
1.
2.
3.
create table _aaa (id serial not null, name varchar(32));

create table _bbb (id serial not null, name varchar(32));



Вставляем:
Код: sql
1.
2.
3.
insert into _aaa (name) values ('ABCDEFGHIJKLMNOPQRUVWXYZ');

insert into _bbb (name) values ('QWERTYUIOPASDFGHJKLZXCVBNM');



Сейчас запрос
Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;



не возвращает записей,

Далее доводим кол-во записей в _bbb до 2048 и более

Код: sql
1.
insert into _bbb (name) select name from _bbb;



И предыдущий запрос начинает возвращать
id name id_1 name_1
1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465256
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
drop table if exists _aaa;
drop table if exists _bbb;
create table _aaa (id serial(1) not null, name varchar(32));
create table _bbb (id serial(2) not null, name varchar(32));
insert into _aaa (name) values ('ABCDEFGHIJKLMNOPQRUVWXYZ');
insert into _bbb (name) values ('QWERTYUIOPASDFGHJKLZXCVBNM');
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;


Informix 11.70FC7W3
Всегда возвращает только одну запись, независимо от количества строк в _bbb
результат1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465310
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16Всегда возвращает только одну запись, независимо от количества строк в _bbb

Ух ты. Дело в том, что не должно быть там записи. Условие написано в where, а не в условии объединения ...on... and...
Такой результат должен возвращать запрос:

Код: sql
1.
2.
select * from _aaa a
  left join _bbb b on a.id = b.id and b.id is null



11.7.FC5, 11.7.TC4, считаю правильным выполнение:

Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;


без записей

Код: sql
1.
2.
select * from _aaa a
  left join _bbb b on a.id = b.id and b.id is null



id name id_1 name_1
1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465348
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ak-47считаю правильным выполнение:

Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;


без записей


Википедия похоже не согласна с Вами :)
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465378
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал на 11.50.UC7W1. Результат не изменился от смены версии.
Ищите подвох в данных, хранящихся в таблицах.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
-- drop table if exists _aaa;
-- drop table if exists _bbb;
create table _aaa (id serial(1) not null, name varchar(32));
create table _bbb (id serial(2) not null, name varchar(32));
insert into _aaa (name) values ('ABCDEFGHIJKLMNOPQRUVWXYZ');
insert into _bbb (name) values ('QWERTYUIOPASDFGHJKLZXCVBNM');
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;
insert into _bbb (name) select name from _bbb;
select * from _aaa a left join _bbb b on a.id = b.id where b.id is null;

select * from _aaa;
select * from _bbb;
drop table _aaa;
drop table _bbb;


Всегда возвращает только одну запись, независимо от количества строк в _bbb
результат1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465472
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16, Почему вы в своем примере сериал в _bbb начинаете с 2 ? Там нечему объединятся. Такой результат меня не удивляет
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465474
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16Википедия похоже не согласна с Вами :)

Прочитал, спасибо. Там приводится классический пример left join.
Объясню на данных из Википедии, что получается у меня:
У меня нет нулов во второй таблице, а есть условие where b.cityid is null
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create table city (id serial not null, name varchar(32));
create table person (cityid serial not null, name varchar(32));

insert into city (name) values ('Москва');

insert into person (name) values ('Андрей');
insert into person (name) values ('Леонид');
insert into person (name) values ('Сергей');



Запрос
Код: sql
1.
2.
3.
select * from city a
  left join person b on a.id = b.cityid 
where b.cityid is null;



Не должен возвращать записей. Как это и делается на 11.7.FC5, 11.7.TC4
На 12 наблюдаю тот же эффект что и раньше - нет записей, при добавлении в person более 2048 - есть.
Проверьте на 11.5 без serial(1), serial(2) в create, это было нечестно :)
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465511
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16 Википедия похоже не согласна с Вами :)

+ реляционная алгебра :-)
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465518
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ikir+ реляционная алгебра :-)
обоснуй
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465589
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47,

Ну вы выполните
select * from _aaa a
left join _bbb b on a.id = b.id
без WHERE и увидите сколько у вас записей имеют b.id is NULL.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465595
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ikir, я то это выполнил более десятка раз, и здесь писал, что их нет. И нет значение a.id, которых нет в b.id.
Выполните вы
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465605
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47Ikir, я то это выполнил более десятка раз, и здесь писал, что их нет. И нет значение a.id, которых нет в b.id.
Выполните вы

Вы на ходу меняете правила игры, а я так не играю.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465617
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ikir, первый пост был, к сожалению ошибочным, я сразу исправился. Более правила игры не менялись.
Впрочем это ваше право. Не стОит.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465678
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47Еще разок

Создаем:
Код: sql
1.
2.
3.
create table _aaa (id serial not null, name varchar(32));

create table _bbb (id serial not null, name varchar(32));



Вставляем:
Код: sql
1.
2.
3.
insert into _aaa (name) values ('ABCDEFGHIJKLMNOPQRUVWXYZ');

insert into _bbb (name) values ('QWERTYUIOPASDFGHJKLZXCVBNM');



Сейчас запрос
Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;



не возвращает записей,

Далее доводим кол-во записей в _bbb до 2048 и более

Код: sql
1.
insert into _bbb (name) select name from _bbb;



И предыдущий запрос начинает возвращать
id name id_1 name_1
1 ABCDEFGHIJKLMNOPQRUVWXYZ NULL NULL

Вы смотрели собственно значения serial в обеих таблицах?

Если значения id в таблицах _aaa и _bbb в вашем примере начинаются с 1 и последовательно возрастают, то
согласно http://pic.dhe.ibm.com/infocenter/informix/v121/topic/com.ibm.sqls.doc/ids_sqs_1033.htm
запрос
Код: sql
1.
2.
3.
select * from _aaa a
  left join _bbb b on a.id = b.id
where b.id is null;


после добавления записи в _aaa:

1. до добавления записей в _bbb запрос должен возвращать 1 запись (ибо left join к одной записи в _aaa таки не сможет пришить записи из _bbb, после чего where пропустит в результат эту строку).

2. после добавления первой и всех последующих записей в _bbb должен всегда возвращать 0 записей (ибо left join к одной записи в _aaa таки пришьёт первую запись из _bbb, после чего where не пропустит в результат эту строку).

Если это не так, баг либо в доке 12.1, либо в серваке 12.1 :)
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465759
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой, конечно смотрел, да, начинаются с 1, последовательно возрастают. Нулов нет!

Полностью согласен с докой и с вашими обоими комментариями. Условие where должно применяться на результат объединения. Т.е. в результате выполнения не должно возвращаться записей.
В 12.1 это не так, при условии большого кол-ва записей в присоединяемой таблице.

Это баг. И не доки. И немаленький.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38465937
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ak-47Условие where должно применяться на результат объединения. Т.е. в результате выполнения не должно возвращаться записей.
В 12.1 это не так, при условии большого кол-ва записей в присоединяемой таблице.
Это баг. И не доки. И немаленький.
Можете привести работоспособный и воспроизводимый SQL-скрипт?
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466096
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16Можете привести работоспособный и воспроизводимый SQL-скрипт?

Конечно.
Вот он.

Естественно, как добавил АнатоЛой: "значения id в таблицах _aaa и _bbb в примере начинаются с 1 и последовательно возрастают"

ЗЫ сегодня проверено еще на 12.1.UC1.DE
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466147
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47,
Несколько иные результаты :
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
-bash-3.2$ onstat -

IBM Informix Dynamic Server Version 12.10.FC2 -- On-Line -- Up 7 days 21:53:09 -- 13402112 Kbytes

-bash-3.2$ echo "select * from _aaa a
>   left join _bbb b on a.id = b.id
> ~
-bash-3.2$ echo "select count(*) from _aaa;select count(*) from _bbb;select * from _aaa a  left join _bbb b on a.id = b.id where b.id is null;" | dbaccess dbadb

Database selected.



      (count(*))

               1

1 row(s) retrieved.



      (count(*))

            4096

1 row(s) retrieved.




No rows found.



Database closed.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466211
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ikir, спасибо. Значит известно и пофиксено. Как поставим FC2 - отпишусь.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466605
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBM Informix Dynamic Server Version 12.10.FC2

Без изменений
Во вложении файл с оформленным работоспособным, воспроизводимым скриптом.
Результат dbaccess:
id 1
name ABC
id
name
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466692
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47,
Что то в консерватории не так.
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
-bash-3.2$ dbaccess dbadb test.sql

Database selected.
Table dropped.
Table dropped.
Table created.
Table created.
1 row(s) inserted.
1 row(s) inserted.
1 row(s) inserted.
2 row(s) inserted.
4 row(s) inserted.
8 row(s) inserted.
16 row(s) inserted.
32 row(s) inserted.
64 row(s) inserted.
128 row(s) inserted.
256 row(s) inserted.
512 row(s) inserted.
1024 row(s) inserted.
2048 row(s) inserted.
4096 row(s) inserted.

No rows found.


Table dropped.


Table dropped.


Database closed.



Ну поставьте после своего SELECT еще один
select * from _bbb b where b.id = 1;...
Попробуйте объявить переменные serial8...
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466722
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IkirНу поставьте после своего SELECT еще один
select * from _bbb b where b.id = 1;

да здесь без проблем:
Код: sql
1.
2.
select * from _aaa a where a.id = 1;
select * from _bbb b where b.id = 1;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
id    1
name  ABC
id
name

1 row(s) retrieved.



         id name

          1 ABC

1 row(s) retrieved.



         id name

          1 DEF

1 row(s) retrieved.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466768
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подменили конфиг - заработал правильно. Разбираем настройки.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38466872
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю. Поменял пару параметров - не определил. Я в конфигурации не очень, это надолго.
Если интересно прилагаю конфигурацию с 12.1.FC1, который я скачал с ИБМ вместе с осью, как вирт. машину. На которой запрос работает не правильно.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38467063
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47Не знаю. Поменял пару параметров - не определил. Я в конфигурации не очень, это надолго.
Если интересно прилагаю конфигурацию с 12.1.FC1, который я скачал с ИБМ вместе с осью, как вирт. машину. На которой запрос работает не правильно.
Приложите, пожалуйста, еще ту, на которой работает правильно.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38471594
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой, извините, что пропал, не было времени на эксперименты.
Вот конфиг с 12.1 FC2, переделанный под вышеуказанный 12.1 FC1, на котором запрос работает как надо.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38471804
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Параметр DS_TOTAL_MEMORY

норм
DS_TOTAL_MEMORY 26214400

boottime currenly default
26214400 4194304 512


не норм
DS_TOTAL_MEMORY

boottime currenly default
512 512
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38474291
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47Параметр DS_TOTAL_MEMORY

норм
DS_TOTAL_MEMORY 26214400

boottime currenly default
26214400 4194304 512


не норм
DS_TOTAL_MEMORY

boottime currenly default
512 512

Это к чему?
Есть подозрения , что именно этот параметр влияет? Или таки выяснили, что точно этот параметр ?

По анализу отличий в ваших конфигах,
я бы в первую очередь проверил влияние MULTIPROCESSOR 0/1,
потом группу DS_...
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38474331
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойЭто к чему?
Есть подозрения , что именно этот параметр влияет? Или таки выяснили, что точно этот параметр ?



Точно этот параметр. Ну или в крайнем случае его связка с другими.
Я в прошлый раз так и начал с мультипроцессора :), ничего не получилось.
Потом в рабочей конфигурации стал менять все параметры по очереди.
Во вложении получившаяся конфигурация. В которой изменение параметра DS_TOTAL_MEMORY как описано в предыдущем сообщении изменяет выполнение скрипта.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38474469
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47, ясно, спасибо.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38482419
iq_73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никто не проверял, интересно?
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38482443
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще один скрипт, не зависящий от кол-ва записей и параметра конфигурации, о котором я писал:
12.1 UC1DE, 12.1 FC2

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
drop table if exists aaa;
drop table if exists bbb;

create temp table aaa(id int, count int);
create temp table bbb(id int, count int);

insert into aaa values (1, 2);
insert into bbb values (1, 2);

select * from aaa a
	left join bbb b on a.id = b.id
where a.count > b.count;

select * from aaa a
	left join bbb b on a.id = b.id
where nvl(a.count,0) > nvl(b.count,0);




Выполнение:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Database selected.

Table dropped.
Table dropped.

Temporary table created.
Temporary table created.

1 row(s) inserted.
1 row(s) inserted.

         id       count          id       count 

No rows found.


         id       count          id       count 

          1           2                        

1 row(s) retrieved.



Что скажете?
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38483067
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak-47, что тут сказать?!
Где ты их берёшь?! :)
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38483118
iq_73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой, попробовали запустить систему с 11.7 на 12.1 Не взлетает
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38483181
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, переход запланировали. Наш ДБ девелопер нарывает. Вот не знаем что и делать, так точно не взлетит.
...
Рейтинг: 0 / 0
Загадка Informix 12
    #38483596
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iq_73... попробовали запустить систему с 11.7 на 12.1 Не взлетает
А зачем Вам 12.1 ? В продакшн или в тест?
Если в продакшн, то мое мнение - пока не появится минимум пятый фикспак (12.10.xC5)
смысла нет ставить 12-ю версию. Насколько я знаю, сейчас самый последний 12.10.xС2

На 11.70.FC7W3 я проверил Ваш селект - отрабатывает так как надо.

Если же у Вас есть желание тестировать новые фичи - для этого у IBM-а есть
специальная программа для разработчиков с бесплатной техподдержкой.
Я участвовал в одной из таких программ перед выходом 11.7.
Интересно было пообщаться с разработчиками напрямую, но не более того.
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Informix [игнор отключен] [закрыт для гостей] / Загадка Informix 12
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]