powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нарушение уникальности PK
111 сообщений из 111, показаны все 5 страниц
Нарушение уникальности PK
    #39195251
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.

FB 2.5 WI-V6.3.4.26856

Обнаружено нарушение уникальности первичного ключа.

Фрагмент таблицы:
Код: plsql
1.
2.
3.
4.
create table T (
    ID          integer NOT NULL,
    REF_ID      integer,
    NAME        varchar(100),



Такой запрос возвращает некое значение ID:
Код: plsql
1.
2.
3.
4.
select ID
  from T
 group by ID
having count(*) > 1



Запрос вида
Код: plsql
1.
2.
3.
select *
  from T
 where ID = 123

возвращает 2 абсолютно идентичных по значениям полей записи

В логе сервера ничего криминального нет. Но это ни о чем не говорит - в какой-то момент была переустановка сервера (в смысле, самой железяки). Весьма вероятно, что эти данные были вставлены в таблицу до переустановки сервера.

Правильно ли я понимаю, что гикнулся индекс первичного ключа и надо его пересоздать?

С уважением, Polesov.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195256
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл указать, что по полю ID создан первичный ключ:
Код: plsql
1.
ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (ID);
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195262
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
индекс битый
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195301
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Битый индекс способен не вернуть существующую запись, но вернуть несуществующую...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195304
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, апдейт вида
Код: plsql
1.
update T set ID = ID

выполнился без каких-либо ошибок
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195310
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Polesov!
You wrote on 18 марта 2016 г. 13:08:00:

Polesov> выполнился без каких-либо ошибок
читай статью о поиске дубликатов
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195315
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

зачем надо было делать апдейт? надо было индекс перестроить
ALTER INDEX PK_T ACTIVE;
COMMIT;
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195317
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

собственно, если в таблице и правда дубли, при перестройке индекса будет облом. на некоторое время окажешься с таблицей без контроля ПК.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195318
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, не помогло.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195323
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

gfix -v -fu - что говорит ?

Поле - точно INTEGER ? А может там NUMERIC ? Или (о ужас) VARCHAR\DOUBLE PRECISION ?
А может там раньше был не INTEGER ?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195325
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

не верю. или см. ответ hvlad.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195330
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladgfix -v -fu - что говорит ?
data base file name (localhost:с:\data\db.fdb) already given

hvladПоле - точно INTEGER ? А может там NUMERIC ? Или (о ужас) VARCHAR\DOUBLE PRECISION ?
INTEGER

hvladА может там раньше был не INTEGER ?
Вот этого не знаю - БД была создана давно.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195332
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvPolesov,

не верю. или см. ответ hvlad.

Да я сам не верю
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195337
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таблице есть поле, хранящее GUID в текстовом виде.
Был сделан бекап БД в GBK-файле осуществлен поиск этого GUID.
Найдено 2 совпадения - говорит ли это о том, что в БД данная запись присутствует 2 раза?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195341
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Polesov!
You wrote on 18 марта 2016 г. 13:36:20:

Polesov> В таблице есть поле, хранящее GUID в текстовом виде.
> Был сделан бекап БД в GBK-файле осуществлен поиск этого GUID.
> Найдено 2 совпадения - говорит ли это о том, что в БД данная запись присутствует 2 раза?
это говорит о том, что в огороде бузина.
а в киеве - дядька.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195345
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesovhvladgfix -v -fu - что говорит ?
data base file name (localhost:с:\data\db.fdb) already givenМне начинать ругаться или ты уже сам понял свою ошибку и пошёл читать синтаксис вызова gfix ?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195346
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladА может там раньше был не INTEGER ?
Вот этого не знаю - БД была создана давно.
Кстати, в таблице есть тайм-стамп когда данные были добавлены.
Инсерт был 23 ноября 2015 года - на тот момент поле точно было INTEGER NOT NULL PRIMARY KEY

И еще, как раз в тот период наблюдались аппаратные проблемы с сервером (чуть позже физически посыпались 2 HDD)
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195387
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[/quot]Мне начинать ругаться...[/quot]
В конце поставил точку с запятой и не мог понять, что не так...

Код: powershell
1.
2.
Summary of validation errors
        Number of index page errors     : 1




Пересоздание индекса помогло:
- удаляем все FK, указывающие на эту таблицу
- удаляем двойные записи
- удаляем PK
- восстанавливаем PK
- восстанавливаем удаленные записи-двойники в единственном экземпляре
- восстанавливаем все FK на эту таблицу
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195398
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийэто говорит о том, что в огороде бузина.

В бд в залезли НЕХ-редактором и изменили значение текстового поля одной из записей-двойников: в селекте 2 поля с отличием измененного текстового поля
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195406
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Polesov!
You wrote on 18 марта 2016 г. 14:21:05:

Polesov> В бд в залезли НЕХ-редактором и изменили значение текстового полязаписи на странице данных пакуются.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195415
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийзаписи на странице данных пакуются.

Были изменены символы в значении поля, было ABC - стало ZZZ. Длина не менялась.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195422
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Polesov!
You wrote on 18 марта 2016 г. 14:27:37:

Polesov> Были изменены символы в значении поля, было ABC - стало ZZZ. Длина не менялась.
При наличии отсутствия пропитанных шпал, — кричал Виктор Михайлович на весь двор, — это будет не трамвай, а одно горе!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195427
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийПри наличии отсутствия пропитанных шпал, — кричал Виктор Михайлович

Ну, да - это вам не ешака купить.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195478
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovБыли изменены символы в значении поля, было ABC - стало ZZZ. Длина не менялась.Похоже, не догоняешь.
Перевожу: возьми zip-архив, и поменяй что-то в нём, не меняя длины. О результатах распаковки доложи.
Пример грубый, но наглядный.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195484
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

Данные менялись в копии БД, а не бэкапе.
Или FB при записи данных их сжимает, а при чтении - разжимает?

Я думал, что упакованные данные - это хранение VARCHAR актуальных данных, а не всей объявленной длины.
Или я не прав?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195487
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryПохоже, не догоняешь.
Да нет, тут есть элемент везения: заменить одну несжимаемую последовательность на любую
другую можно весьма легко. В отличии от архива, БД использует примитивный RLE и
контрольные суммы там отсутствуют от слова "совсем".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195492
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Dimitry Sibiryakov!
You wrote on 18 марта 2016 г. 15:21:48:

Dimitry Sibiryakov> Да нет, тут есть элемент везения: заменить одну несжимаемую последовательность на любую
> другую можно весьма легко. В отличии от архива, БД использует примитивный RLE и
> контрольные суммы там отсутствуют от слова "совсем".текстовое представление GUID жмётся даже RLE
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195521
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийтекстовое представление GUID жмётся даже RLE
Продемонстрируешь как? А то у меня оно что-то не желает...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195524
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovПересоздание индекса помогло:
а типа, alter index active - не помогло? Тогда и пересоздание индекса "не помогло". Потому что это одно и то же.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195527
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Dimitry Sibiryakov!
You wrote on 18 марта 2016 г. 15:46:57:

Dimitry Sibiryakov> Продемонстрируешь как? А то у меня оно что-то не желает...
а как у тебя не получается?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195532
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kdv!
You wrote on 18 марта 2016 г. 15:47:32:

Kdv> а типа, alter index active - не помогло?Дим, у него ж PK

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195537
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийа как у тебя не получается?
Вот так у меня не получается:
Код: sql
1.
RPAD('', длина поля, UUID_TO_CHAR(GEN_UUID()))


gstat упорно выдаёт, что средний размер сжатой записи на странице больше, чем это
единственное поле в таблице.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195551
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийДим, у него ж PK
ты знаешь, я много лет верил, что перестроить индекс без удаления можно только alter index inactive/active. Естественно, что inactive для индексов по констрейнтам не работает.
А потом вышел dimitr, и заявил, что inactive нафиг не нужен, по active оно само. Я проверил - работает!
Только Полесову я же специально написал, COMMIT! Он, видать, не знает, что индексы строятся или перестраиваются по коммиту, а не по ddl.

p.s. пример
alter index rdb$primary161 active
Prepare time = 0ms
Execute time = 0ms

commit
Transaction commited... (3167 ms)
три секунды - миллион записей.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195558
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvPolesovПересоздание индекса помогло:
а типа, alter index active - не помогло? Тогда и пересоздание индекса "не помогло". Потому что это одно и то же.
Между удалением индекса и его созданием было удаление дубликата записи.
Все таки дубликат записи был - без PK запрос тоже выдал 2 записи.
Так совпало - был дубликат записи и ошибка индексной страницы.

P.S. я уже говорил, в момент занесения данных в БД были аппаратные проблемы с сервером. Но можно только предполагать...
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195561
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvТолько Полесову я же специально написал, COMMIT!
Я делал COMMIT - не помогло. Видимо, дело в наличии физического дубликата записи (писал об этом выше)
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195572
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если gfix говорит
Код: powershell
1.
2.
Summary of validation errors 
	Number of index page errors	: 2


как определить, какие именно индексы битые?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195579
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Dimitry Sibiryakov!
You wrote on 18 марта 2016 г. 16:46:09:

Dimitry Sibiryakov> gstat упорно выдаёт, что средний размер сжатой записи на странице больше, чем это
> единственное поле в таблице.таки да.
беру свои слова обратно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195580
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesovкакие именно индексы битые?У вас, я так понимаю, 2.5.4 ? Тогда так:
Код: plaintext
%fb254_home%\bin\fbsvcmgr localhost:service_mgr user sysdba password masterkey action_validate dbname путь_к_базе\имя_базы.fdb
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195611
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovkdvТолько Полесову я же специально написал, COMMIT!
Я делал COMMIT - не помогло. Видимо, дело в наличии физического дубликата записи (писал об этом выше)Индекс не построится, если есть дубликаты
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195612
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovЕсли gfix говорит
Код: powershell
1.
2.
Summary of validation errors 
	Number of index page errors	: 2



как определить, какие именно индексы битые?Читать firebird.log
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195613
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид, спасибо, все получилось.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195621
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladИндекс не построится, если есть дубликаты
Правильно ли я понимаю, что если есть дубликаты, то
Код: plsql
1.
alter index MY_INDEX active

выдаст ошибку?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195680
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov не помогло
не помогло - это как? если у тебя на диске есть 2 записи по индексируемому ПК столбцу, то alter index active по коммиту выдаст ошибку, что индекс не может быть создан, т.к. есть дубликаты.
Если же индекс был создан без ошибки, это значит, что данные, находящиеся на диске, и то, что ты видишь - не одно и то же.
То есть, для индекса никаких дубликатов нет. А при выводе ты видишь "дубликаты" только для конкретного формата вывода - это означает, что хранимые данные и выводимые данные отличаются.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195681
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovПравильно ли я понимаю, что если есть дубликаты, то
ё-мое.
alter index inactive/active (или просто active) это в отношении содержимого эквивалент пары drop index / create index, только с сохранением информации об индексе в системных таблицах. "Неактивный" индекс есть только в rdb$indices и rdb$index_segments, страниц индекса в базе нет.
А при active или create индекс строится, с нуля, совершенно одинаковым в обоих случаях способом. И ошибку про дубликаты (и другое) будет выдавать тоже одинаково.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195685
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

чего я вообще дурака валяю
http://www.ibase.ru/files/firebird/Firebird_2_5_Language_Reference_RUS.pdf
стр 118 и далее (alter index).
все написано РУССКИМ языком, и даже специальная пометка на тему active в отношении pk, fk и unique есть (как я понимаю, благодаря мне).
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195709
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovИли FB при записи данных их сжимает, а при чтении - разжимает?Да. Сжимается целиком строка, а при чтении разжимается.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195722
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvPolesov не помогло
не помогло - это как? если у тебя на диске есть 2 записи по индексируемому ПК столбцу, то alter index active по коммиту выдаст ошибку, что индекс не может быть создан, т.к. есть дубликаты.
Если же индекс был создан без ошибки, это значит, что данные, находящиеся на диске, и то, что ты видишь - не одно и то же.
То есть, для индекса никаких дубликатов нет. А при выводе ты видишь "дубликаты" только для конкретного формата вывода - это означает, что хранимые данные и выводимые данные отличаются.

Вот сейчас проделаю все операции на копии БД, содержащей ошибку:

GFIX:
Код: powershell
1.
2.
Summary of validation errors 
	Number of index page errors	: 1



Запрос:
Код: plsql
1.
2.
3.
4.
select ID, count(*)
  from T
 group by ID
having count(*) > 1

Результат: 123, 2

Запрос:
Код: plsql
1.
2.
3.
select *
  from T
 where ID = 123

Результат: 2 абсолютно идентичных записи

Выполняю:
Код: powershell
1.
2.
3.
SQL> alter index PK_T active;
SQL> commit;
SQL>

Имя индекса совпадает с именем PK.
Вроде бы тут на перестроение индекса должна быть ругань?

Запрос:
Код: plsql
1.
2.
3.
select *
  from T
 where ID = 123

Результат: 2 абсолютно идентичных записи

GFIX:
Код: powershell
1.
2.
Summary of validation errors 
	Number of index page errors	: 1



Что я делаю не так?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195725
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryСжимается целиком строка, а при чтении разжимается.

Тогда как объяснить, что мне в файле БД обычном фар-ом удалось найти занчение текстового гуида?
Более того, после изменения в текстовом значении поля непосредственно в файле БД эти изменения стали видны при SQL-запросе.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195728
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Polesov!
You wrote on 18 марта 2016 г. 19:08:19:

Polesov> Тогда как объяснить, что мне в файле БД обычном фар-ом удалось найти занчение текстового гуида?
> Более того, после изменения в текстовом значении поля непосредственно в файле БД эти изменения стали видны при SQL-запросе.
вполне возможно то что ты пишешь.
проверено экспериментально.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195731
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovhvladИндекс не построится, если есть дубликаты
Правильно ли я понимаю, что если есть дубликаты, то
Код: plsql
1.
alter index MY_INDEX active


выдаст ошибку?Нет. Ошибку выдаст commit.
Правда, если выполнять это в isql, то он сделает коммит сам (если ему явно не запретить)
и будет казаться, что ошибку выдал ALTER
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195733
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovТогда как объяснить, что мне в файле БД обычном фар-ом удалось найти занчение текстового гуида?Если я правильно путаю, то сравнивается размер сжатой и нормальной записи, и если сжатая больше, пишется без сжатия.

Почему-то я так помню, искать лень, поправьте, коллеги.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195735
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovВот сейчас проделаю все операции на копии БД, содержащей ошибку:

GFIX:
Код: powershell
1.
2.
Summary of validation errors 
	Number of index page errors	: 1

Где соотв. сообщение из firebird.log ?

PolesovЧто я делаю не так?Мне отсюда не видно.
Например я понятия не имею - что такое PK_T, какое отношение он имеет к T и где у тебя INT, а где GUID.

Давай сюда DDL таблицы, индексов и сообщение из firebird.log
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195736
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladОшибку выдаст commit.
Правда, если выполнять это в isql, то он сделает коммит сам (если ему явно не запретить)
и будет казаться, что ошибку выдал ALTER

Делал и в isql, и в ibe - никаких ошибок не было. Ни до commit, ни после.

Готов рассмотреть возможность передачи экземпляра БД.
Если удалить данные из других таблиц, повлияет ли это на наличие ошибки?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195738
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийHello, Polesov!
You wrote on 18 марта 2016 г. 19:08:19:

Polesov> Тогда как объяснить, что мне в файле БД обычном фар-ом удалось найти занчение текстового гуида?
> Более того, после изменения в текстовом значении поля непосредственно в файле БД эти изменения стали видны при SQL-запросе.
вполне возможно то что ты пишешь.
проверено экспериментально.


Значит, в моем случае все же было 2 записи?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195739
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryЕсли я правильно путаю
Неправильно ты путаешь. Это делается для дельты. Сжатие безусловно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195748
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladДавай сюда DDL таблицы, индексов и сообщение из firebird.log

firebird.log
Код: powershell
1.
2.
3.
PC-12	Fri Mar 18 18:52:53 2016
	Database: err_db
	Index 16 is corrupt (record 0 have missing entries) in table T (192)



Фрагмент таблицы:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE T (
    ID                  INTEGER NOT NULL,
    REF_ID              INTEGER,
    NAME1               VARCHAR(1000),
    NAME2               VARCHAR(60),
    COMMENTS            VARCHAR(255),
    DELETED             SMALLINT DEFAULT 0 NOT NULL,
    CREATEDATE          DATE,
    CREATOR             VARCHAR(31),
    GUID                CHAR(36) NOT NULL
);

ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (ID);
ALTER TABLE T ADD CONSTRAINT UNQ_T UNIQUE (REF_ID);
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195760
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovЧто я делаю не так?
для полноты эксперимента
- надо посмотреть, что пишется в firebird.log на тему этого битого индекса. Может это и не про этот индекс.
- надо попробовать alter table drop constraint pk, и опять создать pk, без удаления "дубликатов".

я не знаю, каким образом получается, что индекс создается уже битый, причем без ошибки (см. выше, может, гфикс вообще не про тот индекс тебе сообщает).
А вот про "на диске не то, что выводится" - я уже говорил. Поэтому индексирование будет успешным, и физически дубликатов там нет. а ты их якобы видишь.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195766
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovIndex 16 is corrupt
см. rdb$indices, ищи там индекс с номером 16 для таблицы T, и потом давай ddl этого индекса.

p.s. че-то я начинаю терять нить разговора. накой черт тут про исправление гуида на диске hex-едитором, если приведены два уникальных индекса для integer-столбцов??? Где, ёп, индекс по guid ? :-) Вот зачем людям голову морочить лишней информацией?

Polesovrecord 0 have missing entriesв данном случае что-то не индексируется. Могу тогда разве что поставить на то, что на диске данные настолько для движка кривые, что он их читает, но не индексирует, и даже ошибку не выдает.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195775
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvнакой черт тут про исправление гуида на диске hex-едитором, если приведены два уникальных индекса для integer-столбцов?

для того, чтобы одному из них поменять PK-ID обычным UPDATE ... WHERE GUID = xxxxx

хотя, конечно, можно было бы и к RDB$DB_KEY привязаться и через курсор замутить, и наверное через генератор тоже...
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195839
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

я не вижу 17 индексов в этом DDL.
Так что какой из них сломан - остаётся загадкой.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195988
_Читатель_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос, м.б. и дилетантский, но: Почему бы не создать новую (пустую) базу, а затем не перелить в нее данные?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197105
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.

На текущий момент из БД удалены все объекты, кроме таблицы с проблемным PK.
В этой таблице оставлено 2 поля (DDL получен в IBE):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE DOMAIN D_ID AS INTEGER NOT NULL;

CREATE DOMAIN D_GUID AS VARCHAR(36) CHARACTER SET WIN1251 COLLATE WIN1251;

CREATE TABLE EMPLOYES (
    ID    D_ID NOT NULL,
    GUID  D_GUID NOT NULL
);

ALTER TABLE EMPLOYES ADD CONSTRAINT PK_EMPLOYES PRIMARY KEY (ID);

CREATE INDEX EMPLOYES_IDX_GUID ON EMPLOYES (GUID);



Был сделан бэкап/ресторе - база получилась 118 MB.
GFIX ошибок не находит.
Запрос вида
Код: plsql
1.
2.
3.
4.
select ID, count(*)
  from EMPLOYES
 group by ID
having count(*) > 1

по прежнему возвращает

Код: powershell
1.
2.
ID      COUNT
187112	2



P.S. Интересующимся могу выслать базу по запросу.

С уважением, Polesov.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197114
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

высылай (не саму БД есс-но, ссылку на место загрузки)
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197115
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Читатель_Почему бы не создать новую (пустую) базу, а затем не перелить в нее данные?

Если БД имеет большой объем, время переливки может быть весьма значительным.

Гораздо проще (и быстрее) удалить все FK на проблемную таблицу, удалить PK, избавиться от записи-дубля, и восстановить PK и все удаленные FK.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197117
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

да, и ещё :
а) проверь на 2.5.5 (лучше на текущем снапшоте 2.5.6), а не на 2.5.4
б) что выдаст такой запрос ?

Код: sql
1.
2.
3.
4.
select ID + 0, count(*)
  from EMPLOYES
 group by 1
having count(*) > 1
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197122
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197130
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladда, и ещё :
а) проверь на 2.5.5 (лучше на текущем снапшоте 2.5.6), а не на 2.5.4

Проверял на:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
SQL> show version;
ISQL Version: WI-V2.5.5.26952 Firebird 2.5
Server version:
Firebird/x86/Windows NT (access method), version "WI-V2.5.5.26952 Firebird 2.5"
Firebird/x86/Windows NT (remote server), version "WI-V2.5.5.26952 Firebird 2.5/XNet (IT-03)/P12"
Firebird/x86/Windows NT (remote interface), version "WI-V2.5.5.26952 Firebird 2.5/XNet (IT-03)/P12"
on disk structure version 11.2
SQL>



hvladб) что выдаст такой запрос ?

Код: sql
1.
2.
3.
4.
select ID + 0, count(*)
  from EMPLOYES
 group by 1
having count(*) > 1


Тоже самое.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197135
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovЗапрос:
Код: plsql
1.
2.
3.
select *
  from T
 where ID = 123


Результат: 2 абсолютно идентичных записи


А план какой? может он у тебя по другому индексу отбирает, не по PK_T

придумался ещё один весьма экзотичный, но гипотетически возможный баг: в индексе реально создаются два листа для одной записи, и при отборе именно по индексу запись задваивается, в отличие от " ...WHERE (ID+0) = 123"
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197145
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, имя индекса отличается от имени PK. Вот что показывает IBE:
Код: powershell
1.
2.
Constraint Name        On Field        Index Name        Index Sorting
PK_EMPLOYES            ID              RDB$PRIMARY16     Ascending
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197151
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochА план какой?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select *
  from EMPLOYES
 where ID = 187112

Plan
PLAN (EMPLOYES INDEX (RDB$PRIMARY16))

Adapted Plan
PLAN (EMPLOYES INDEX (PK_EMPLOYES))



Код: plsql
1.
2.
3.
4.
5.
6.
select *
  from EMPLOYES
 where ID + 0 = 187112

Plan
PLAN (EMPLOYES NATURAL)



Оба запроса возвращают 2 записи
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197157
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochпридумался ещё один весьма экзотичный, но гипотетически возможный баг
Этот баг совсем не гипотетический и совсем не экзотичный. Он живёт в сервере с версии 1.0
или 1.5, но не приводит к такому результату, поскольку в битовой карте бит не может быть
установлен дважды.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197164
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удалил PK и создал его заново - никаких ошибок. Дубликат PK остался.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197169
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAriochпридумался ещё один весьма экзотичный, но гипотетически возможный баг
Этот баг совсем не гипотетический и совсем не экзотичный. Он живёт в сервере с версии 1.0
или 1.5, но не приводит к такому результату, поскольку в битовой карте бит не может быть
установлен дважды.

то есть записи возвращаются из таблицы не напрямую по индексу, а через промежуточное построение битовой карты, даже если никаких джойнов нет и в помине?

не знал...
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197173
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

битовая карта не строится только в одном случае, когда идёт навигация по индексу
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197200
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovКстати, имя индекса отличается от имени PK.
это значит, что или констрейнт ПК не был поименован при создании, или что даже если был именован, был создан в ФБ ниже версии 1.5.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197210
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochне знал...
значит на курсах у меня ты не был. :-)
более того, список номеров записей перед вытаскиванием записей еще и сортируется, чтобы чтение было упорядочено по страницам данных, а не по ключам. Иначе io будет в десятки раз выше. Как например, при "навигации по индексу".
http://ibaseforum.ru/viewtopic.php?f=4&t=4175
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197214
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

у меня на твоём файле воспроизвелось. По DDL вроде всё нормально. Уж не знаю что там произошло. Странно что
ALTER INDEX ... ACTIVE
COMMIT
действительно не даёт никаких ошибок.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197232
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

не был, "раньше котлеты не подгорали" :-)

я уже глянул в dataaccesspaths на эту тему
с неверсионными индексами в целом разумно

но всё же первая мысль "а вот сейчас карта большой таблицы каааак вылезет за пределы оперативки отпущенной серверу" :-)

если бы заранее оценивать размер выборки - большой он или маленький ожидается - и что будет дешевле в итоге, строить карту или рисковать вытеснением уже прочитанных страниц из кэша....

то есть для уникальных индексов Where x=y запрос явно будет дешевле без промежуточного картирования
для неуникальных индексов с хорошей селективностью - тоже

а если отбор ещё условно "для грида" и до конца фетчиться никогда не будет - то держать в память карту просто попусту тратить память :-(
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197234
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

AS. цикл active->inactive->active тоже ?

у вас там вроде есть инструменты напрямую в fbk-файлах ковыряться?

ещё одна сумасшедшая идея, что изначально ID был другим целым числом, например int16, а не int32, или ещё каким-нибудь numeric/decimal

и поэтому в этих экземплярах записи хотя значения и одно, храниться оно разными битами
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197240
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

по словам ТСа он даже PK пересоздал. Так что у меня нет даже предположений что случилось.
А копанием во внутренностях я не занимаюсь, не путай меня с kdv.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197243
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

Баг подтверждаю, регрессия в 2.5.3 :(

В трекер занесёшь ?

PS 7z сказать где лежит ?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197246
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochно всё же первая мысль "а вот сейчас карта большой таблицы каааак вылезет за пределы оперативки отпущенной серверу" :-)

если бы заранее оценивать размер выборки - большой он или маленький ожидается - и что будет дешевле в итоге, строить карту или рисковать вытеснением уже прочитанных страниц из кэша....

то есть для уникальных индексов Where x=y запрос явно будет дешевле без промежуточного картирования


для уникальных индексов и индексов с хорошей селективностью карта большой не будет. Другое дело что будет большое количество выделений и освобождений памяти. Так что для уникальных индексов её действительно дешевле не строить, всё равно уникальный индекс даст не более одной записи, а остальные индексы скорее всего задействованы не будут. А вот насчёт неуникальных с хорошей селективностью вопрос спорный.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197257
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladБаг подтверждаю,
баг-то в чем? волшебное значение столбца, для которого может быть создано N ключей (больше 1) в уникальном индексе?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197264
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochа вот сейчас карта большой таблицы каааак вылезет за пределы оперативки отпущенной серверу
к примеру, таблица с 2 760 304 951 записей, занимает 249 гиг. Индекс (их много) по одному столбцу, в зависимости от распределения значений - в среднем 100 гиг (от 63 до 122).
Но если в качестве "битовой карты" даже использовать просто массив номеров записей, то Record_count * 8 = 21 гиг. Да, может не влезть. Но как-то никто пока не жаловался. :-)
А для настоящей битовой карты будет Record_count / 8, то есть 329 мб.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197280
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochс неверсионными индексами в целом разумно
при чем тут "неверсионные" индексы? речь про выборку записей по найденным в индексе их номерам. Хоть с версиями, хоть без, надо сначала номера записей из ключей выбрать. А потом уже можно или по этим номерам записей ехать по data pages, или "склеивать" такие массивы номеров как битовые, при and/or и прочем.
Некоторые сервера могут выдавать данные и без обращения к таблице, это уже "индексное покрытие", другая тема. Вот в ней уже "неверсионность" индекса является определяющей.

p.s. по поводу ключей с номерами транзакций.

28.10.2014 [Firebird-devel] Indexes - things to think about for V
3) Transaction IDs in index keys

Someone mentioned including transaction ids in the index key to avoid reading record data when using an index that provides all needed
information. Those situations are real - count of customers in Mexico, junction records for M to M relationships, etc. In some cases, two
transaction ids are required - one for the transaction that created entry and the transaction superseded it. That's potentially 16 bytes subtracted from the key size. OK, maybe not so big a problem, but it also means that when a key changes, the change must be made in two places. But you know all those arguments.

Jim's going to hate this. Might it be possible to have a second sort of index specifically for those cases where the read efficiency outweighs the storage and management overhead? Yes, one more place where the application designer can be blamed for poor performance.

короче, полная шляпа.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197282
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladPolesov,

Баг подтверждаю, регрессия в 2.5.3 :(

В трекер занесёшь ?
А что именно написать? Файл БД надо прикладывать?


P.S. Про то, что файл не сжал - извиняюсь.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197301
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladВ трекер занесёшь ?

CORE-5161
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197314
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

спасибо !
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197326
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

что же ты туда архивированную БД не приложил?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197361
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

тест я сейчас сделаю
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197479
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvА для настоящей битовой карты будет Record_count / 8, то есть 329 мб.

Ну да, и если там реально надо форму заполнить для юзера с 20-40 строками, и 99% что пользователь больше и не будет смотреть, то как ни странно 40 fetch page по памяти бы куда дешевле влезло.

Теперь представить десяток таких пользователей и открытыекурсоры (для тех немногих, кто все же начнет прокручивать грид вниз)....
И на сильно загруженном сервере эта радость начнет весело пейджиться.

вспомнилось, к вопросу об анекдотах, у клиента начались дикие тормоза, вот вообще FB не жил, при том что никаких нехваток ресурсов его процессу не было даже близко. Довольно быстро выяснилось, что всю память загрёб MSI Installer закачавший патчи для MS SQL и терпеливо ждущий перезагрузки. Но тормоза почему-то проявились из всего крутившегося на сервере именно на FB

С памятью кэшей, настраиваемой в firebird.conf битовые карты не пересекаются? а то ещё и кэш вытеснять начнут...
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197482
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисдля уникальных индексов и индексов с хорошей селективностью карта большой не будет.

почему? размер битовой карты зависит исключительно от "грязного" количества записей в таблице, сами индексы (их характеристики) тут не при чём
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197485
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

ну Jim вообще в итоге от версионности ушел, точнее решил, что версии нужны только в памяти ,но не на диске
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197504
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

битовая карта - это разреженный массив битов. В таком массиве неустановленные элементы не хранятся (хотя зависит от реализации).
Если я правильно понял исходники, то для индексов битовая карта объявлена здесь /src/jrd/sbm.h а сам разреженный массив битов здесь /src/common/classes/sparce_bitmap.h
Сама по себе структура очень экономная. И максимум памяти будет занимать только когда ключ будет указывать на все записи, т.е. когда индекс будет иметь отвратительную селективность.

AriochС памятью кэшей, настраиваемой в firebird.conf битовые карты не пересекаются

битовые карты и кэш вещи перпендикулярные
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39198321
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисArioch,

битовая карта - это разреженный массив битов. В таком массиве неустановленные элементы не хранятся (хотя зависит от реализации).
....
Нет. [cencored]
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39198333
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

ты не знаешь способы организации разреженных массивов? Вот одна из них http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/23/2303.htm
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39198334
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Тебе как документописателю недопустимо путать понятия
https://ru.wikipedia.org/wiki/Битовая_карта
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39198347
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

вот жеж не верующий. Я тебе даже файлы привел с исходниками

/src/jrd/sbm.h
Код: plaintext
1.
2.
3.
4.
........
// Bitmap of record numbers
typedef Firebird::SparseBitmap<FB_UINT64> RecordBitmap;
............



второй файл приводить не буду. Если интересно сам посмотришь. Но суть в том что это как раз разреженный массив сделаный с помощью бинарного дерева

/src/common/classes/sparce_bitmap.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
	
..........
        // Bucket with bits
	struct Bucket
	{
		T start_value; // starting value, BUNCH_BITS-aligned
		BUNCH_T bits;  // bits data
		inline static const T& generate(const void* /*sender*/, const Bucket& i)
		{
			return i.start_value;
		}
	};

	typedef BePlusTree<Bucket, T, MemoryPool, Bucket> BitmapTree;
	typedef typename BitmapTree::Accessor BitmapTreeAccessor;
.........
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39198351
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

в Firebird битовые карты действительно разрежены. Внутреннее представление основано на b+ дереве, а не на сплошном массиве, если об этом идёт речь.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39198353
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

да. Именно это я и пытался объяснить
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39198359
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Ну да, вы храните дерево непустых бинарных карт. А совсем не то, что написал Денис первоначально.

А то я уже хотел предложить на Нобелевку за сжатие битов выдвинуть )
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39198361
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

блин каких битов? Смысл того что я писал не в сжатии битов. Я говорил не про один кусок карты (естественно его ты не сожмёшь), а про карту в целом. Мой пост был о том, что если ключ ссылается на одну единственную запись, то битовая карта не будет занимать RecordCount/8, как это писал Arioch. А всего лишь один узел дерева в котором хранится два 64 битных числа.

Или ты решил докопаться до определения битовая карта. Так я тут противоречий не вижу.

wikipediaБитовая карта (англ. bitmap, bitset, bit array) — набор последовательно записанных двоичных разрядов, то есть последовательность ( массив ) битов.
Я про массив в целом и писал. Уж как он там внутри сделан дело десятое.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39198372
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Ты написал бред, я тебе его процитировал. Выражайся точнее.
Модератор: А ты поаккуратнее с прилагательным "эротический". Ведь можно и канделябром.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39198421
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglТы написал бред, я тебе его процитировал. Выражайся точнее.
мне кажется, ты запутался. и вместо того, чтобы извиниться, начинаешь других обвинять в бреде.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39200787
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.

Сегодня опять вылезла ошибка с нарушением уникальности PK.

Вроде бы вышел снапшот 2.5.6, в котором баг пофиксен, но руководство считает, что ставить снапшот в продакшн несколько авантюрно.

Вопросы разработчикам:
- планируется ли выпуск релиза 2.5.5 с исправленной ошибкой?
- если нет, то когда можно ожидать выпуск релиза 2.5.6?

С уважением, Polesov.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39200820
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovВроде бы вышел снапшот 2.5.6, в котором баг пофиксенКакой именно баг имеется в виду ?


PolesovВопросы разработчикам:
- планируется ли выпуск релиза 2.5.5 с исправленной ошибкой?Релиз 2.5.5 уже выпущен

Polesov- если нет, то когда можно ожидать выпуск релиза 2.5.6? http://www.firebirdsql.org/en/roadmap/
roadmapv2.5.6 is the next point release to come, it's scheduled for Q2 2016.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39200827
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladКакой именно баг имеется в виду ?
PolesovСегодня опять вылезла ошибка с нарушением уникальности PK

roadmapv2.5.6 is the next point release to come, it's scheduled for Q2 2016.
Спасибо.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39200891
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё раз, медленно, - что именно считается багом ?
Сам факт появления дупликата в индексе ? Где и кем это исправлено ?
Или тот факт, что PK может быть построен на не уникальных данных ? Это как раз исправлено.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39200912
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

имелось ввиду

PK может быть построен на не уникальных данных
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39201850
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Влад, так в чем там баг-то? волшебные значения, или вообще?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39201864
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВлад, так в чем там баг-то? волшебные значения, или вообще?Я же написал в трекере:
http://tracker.firebirdsql.org/browse/CORE-5161 The problem occurs when records with same keys fall into separate sort run's and that run's not merged until
final phase of index creation (fast_load) Т.е. если записи с одинаковыми ключами достаточно далеко друг от друга, чтобы не попасть в один и тот же sort run
И
кол-во sort run's таково, что они не сливаются до окончательной фазы построения индекса.

Это случайно отломили в 2.5.3, раньше всё было ок
...
Рейтинг: 0 / 0
111 сообщений из 111, показаны все 5 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нарушение уникальности PK
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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