Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Order by guid ( newsequentialid )  [new]
Папуша Дмитрий
Member

Откуда: Санкт-Петербург
Сообщений: 131
Всем привет.

Мой вопрос заключается в следующем.
В одной базе существует таблица с полем типа uniqueidentifier и значение newsequentialid по умолчанию.
Такая же таблица с таким же полем существует во второй базе. Между этими таблицами настроена репликация слиянием.
Это гуидное поле использовалось в запросах для получения последних вставленных записей.. при помощи order by Field1 desc, где Field1 и есть newsequentialid. И все работало отлично. Перед тем как начать использовать этот метод я прочитал несколько статей о том будет ли это работать, протестировал на своей локальной базе. Все тесты отработали на отлично.
Сейчас же я вижу, что 4 последних записи вставленные на издателе и среплицированные на подписчика не появляются в вышеописанном запросе в первых строках. То есть в базе ( в обеих базах ) они есть, но почему то их гуиды имеют не последний порядковый номер. Хотя ориентируясь на поле Creation_Date, видно что вставлены они последними.
Вот собственно и вопрос - изза чего это могло произойти? Я лишь в общих чертах понимаю принцип формирования гуида, поэтому буду очень благодарен любым подсказкам.
Поясню, что такое поведение наблюдается и на подписчике и на издателе. О репликации упомянул для более полной картины.
Microsoft SQL Server 2005 - 9.00.4053.00 (X64)   May 26 2009 14:13:01   Copyright (c) 1988-2005 Microsoft Corporation  Standard Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2) 

Спасибо.
23 окт 09, 15:35    [7830611]     Ответить | Цитировать Сообщить модератору
 Re: Order by guid ( newsequentialid )  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Ну так "последовательность" гарантируется в рамках одной машины, разные центры эмиссии newsequentialid() (серверы) имеют разное стартовое значение.
23 окт 09, 15:50    [7830749]     Ответить | Цитировать Сообщить модератору
 Re: Order by guid ( newsequentialid )  [new]
Папуша Дмитрий
Member

Откуда: Санкт-Петербург
Сообщений: 131
Прошу прощения.

Эти 2 базы находятся на 1 машине и на 1 скл сервере.
НО базы разные.
Я проверил.. новые сгенерированные значения учитываются как самые РАННИЕ, а не самые последние. Как это могло произойти - не понимаю. Ощущение, что последовательность сбилась.. или началась с какой совершенно несовместимой с предыдущими значениями точки.
23 окт 09, 16:17    [7830968]     Ответить | Цитировать Сообщить модератору
 Re: Order by guid ( newsequentialid )  [new]
Папуша Дмитрий
Member

Откуда: Санкт-Петербург
Сообщений: 131
Уточнение.
Цепочка действительно сбилась. Сейчас она генерирует все абсолютно правильно, НО начиная с записей вставляемых сегодня. Все что было до этого дня рассматривается как другая цепь гуидов. В чем может быть дело? Что могло измениться ( накатывались апдейты, ребутился сервер, случался фейловер ) ?
23 окт 09, 16:24    [7831026]     Ответить | Цитировать Сообщить модератору
 Re: Order by guid ( newsequentialid )  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Папуша Дмитрий
Хотя ориентируясь на поле Creation_Date, видно что вставлены они последними
А если Creation_Date проапдейтили?
23 окт 09, 16:27    [7831047]     Ответить | Цитировать Сообщить модератору
 Re: Order by guid ( newsequentialid )  [new]
Папуша Дмитрий
Member

Откуда: Санкт-Петербург
Сообщений: 131
iap,

нет, все проще.
Делелось все так:
Было добавлено это поле с гуидом. Поставлен дефаулт и нот нул. Он заполнился. Это было где то 2 недели назад. Сейчас стали активно добавлять записи, стали замечать, что сортировка не работает.
То есть я точно знаю, что те записи что добавляются сейчас - вставлены позже тех, что там уже были. Creation Date лишь подтверждение.
Так как ни таблица, ни констрейнты не менялись - я не понимаю, в чем может быть проблема. Но сейчас вставляемые записи, при упорядочивании по этому полю ASC все так же выдаются первыми, а не последними. То есть таблица как бы разделилась на 2 секции ДО и ПОСЛЕ. Вот только что же было причиной.. и что теперь делать с этим - не знаю. Это критично - иметь поле, по которому упорядочивание проводить. Дата не подходит - есть много повторяющихся дат изза массового инсерта.

Уф...
23 окт 09, 16:33    [7831095]     Ответить | Цитировать Сообщить модератору
 Re: Order by guid ( newsequentialid )  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Вообще на значения newsequentialid() в качестве поля для сортировки полагаться не стоит - после переустановки сервера или переноса базы на другой, очередность нарушится с вероятностью ровно 50%.

Эта функция хороша только тогда, когда нужно обеспечить вставку новых записей на одну и ту же страницу таблицы/индекса, если таковое поле используется в качестве ключа вмсто хаотичного метания по всему индексу.
23 окт 09, 17:25    [7831478]     Ответить | Цитировать Сообщить модератору
 Re: Order by guid ( newsequentialid )  [new]
Папуша Дмитрий
Member

Откуда: Санкт-Петербург
Сообщений: 131
Да, оценил масштаб проблемы. Как воркэраунд стал использовать комбинацию поля даты создания + поле гуида.
24 окт 09, 11:52    [7833564]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить