Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Глючит MS SQL :(  [new]
Kulavert
Member

Откуда:
Сообщений: 341
Уважаемые! Помогите пожалуйста разобраться:

Есть таблица
aa (aa_id numeric(10,0) identity, bb_id numeric(10,0), dat datetime,... и еще 15 полей)

Выполняется запрос:
select bb_id, count(*)
from aa
where Dat>='20040101'
AND bb_id IN (778622,778639,3001053,3021206,3025438,3025686,745719,764465,766264)
group by bb_id
order by bb_id

Этот запрос выдает такой ужас:
bb_id _________ count
766264 ______ 384066
764465 ______ 429178
745719 ______ 488382
766264 ______ 382872
764465 ______ 427942
745719 ______ 504560
766264 ______ 381090
764465 ______ 427392
745719 ______ 477848
766264 ______ 382872
764465 ______ 436296
745719 ______ 501617

Обратите внимание, bb_id повторяется по 4 раза циклом, причем либо с разным либо с одинаковым COUNT !!! Разве такое возможно?! Я пока что списываю это на глюк одного из звеньев MS SQL, но радости от этого мало. Может дело в использовании "IN"? Если кто-то что может дельного сказать по этому поводу, прошу поделиться!
Дополнительно: в aa около 5млн. записей; почти по всем bb_id в списке "IN" есть записи; MS SQL 2000, sp1.
20 июн 05, 18:16    [1634525]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
а что dbcc checktable скажет?
P.S. Sp3a все равно не помешает
20 июн 05, 18:19    [1634535]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Kulavert
Member

Откуда:
Сообщений: 341
запустил dbcc checktable ('aa')... выполняется..

sp3a не помешает, но этим админы заведуют, они конечно со временем его поставят, но пока что...
20 июн 05, 18:27    [1634557]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Kulavert
Member

Откуда:
Сообщений: 341
Вот что dbcc checktable ('aa') выдал:

DBCC results for 'aa'.
There are 5357952 rows in 187324 pages for object 'sptmcena'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
20 июн 05, 18:28    [1634559]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

автор
sp3a не помешает, но этим админы заведуют, они конечно со
временем его поставят, но пока что...

Что значит "со временем"??!! Срочно пинать админов и патчить немедленно!!!



Posted via ActualForum NNTP Server 1.2

20 июн 05, 21:13    [1634758]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
pr0ger
Member

Откуда: Москва
Сообщений: 1933
а так?

select convert(int,bb_id) bb_id, count(*)
from aa
where Dat>='20040101'
AND bb_id IN (778622,778639,3001053,3021206,3025438,3025686,745719,764465,766264)
group by bb_id
order by bb_id
21 июн 05, 00:05    [1634901]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

автор
Обратите внимание, bb_id повторяется по 4 раза циклом, причем
либо с разным либо с одинаковым COUNT !!! Разве такое возможно?!

Легко!
Если на сервере кроме Вас работают другие пользователи то постоянность
результата, возвращаемого четырьмя последовательными селектами может быть
обеспечена только в транзакции с уровнем изоляции не ниже REPEATABLE READ.

2 автор:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin transaction

select bb_id, count(*)
from aa
where Dat>='20040101'
AND bb_id IN 
(778622,778639,3001053,3021206,3025438,3025686,745719,764465,766264)
group by bb_id
order by bb_id

select bb_id, count(*)
from aa
where Dat>='20040101'
AND bb_id IN 
(778622,778639,3001053,3021206,3025438,3025686,745719,764465,766264)
group by bb_id
order by bb_id

select bb_id, count(*)
from aa
where Dat>='20040101'
AND bb_id IN 
(778622,778639,3001053,3021206,3025438,3025686,745719,764465,766264)
group by bb_id
order by bb_id

select bb_id, count(*)
from aa
where Dat>='20040101'
AND bb_id IN 
(778622,778639,3001053,3021206,3025438,3025686,745719,764465,766264)
group by bb_id
order by bb_id

rollback transaction

выдает такие же непредсказуемые результаты?


Posted via ActualForum NNTP Server 1.2

21 июн 05, 00:18    [1634906]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

pr0ger
а так?

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

2 автор: Поле aa_id identity объявлено с типом numeric(10,0)? Почему не int?
Почему не участвует в первичном ключе?

Posted via ActualForum NNTP Server 1.2

21 июн 05, 00:27    [1634908]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
pr0ger
Member

Откуда: Москва
Сообщений: 1933
транзакции здесь не причем, это один запрос и он выдает несколько раз одинаковый bb_id несмотря на группировку по этому полю. IMHO это связано с тем что bb_id имеет тип numeric(10,0).
21 июн 05, 00:27    [1634909]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Kulavert
Member

Откуда:
Сообщений: 341
pr0ger
а так?

select convert(int,bb_id) bb_id, count(*)
from aa
where Dat>='20040101'
AND bb_id IN (778622,778639,3001053,3021206,3025438,3025686,745719,764465,766264)
group by bb_id
order by bb_id


Не помогло. Выдает ту же ерунду, только с другой сортировкой:
bb_id _ count
745719 148400
745719 1111687
745719 712320
764465 595386
764465 591182
764465 534240
766264 424424
766264 556210
766264 550266
21 июн 05, 06:23    [1635015]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Kulavert
Member

Откуда:
Сообщений: 341
2 Roman S. Golubin

1) Это результат одного запроса.
2) То, что поле aa_id не int, а numeric(10,0) - исторический факт, и спорить с ним безполезно :) Ранее никаких проблем, хоть как-то связанных с Numeric не возникало.
3) Округления нет, так как само поле объявлено с нулевой дробной частью: Numeric(10,0)
21 июн 05, 06:33    [1635018]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Kulavert
1) Это результат одного запроса.

Я уже понял.

Pr0ger недоглядел:

select convert(int,bb_id) bb_id, count(*)
from aa
where Dat>='20040101'
AND convert(int,bb_id) IN (778622,778639,3001053,3021206,3025438,3025686,745719,764465,766264)
group by convert(int,bb_id)
order by convert(int,bb_id)
21 июн 05, 08:33    [1635112]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31622
Kulavert
Уважаемые! Помогите пожалуйста разобраться:

Есть таблица
aa (aa_id numeric(10,0) identity, bb_id numeric(10,0), dat datetime,... и еще 15 полей)

Выполняется запрос:
select bb_id, count(*)
from aa
where Dat>='20040101'
AND bb_id IN (778622,778639,3001053,3021206,3025438,3025686,745719,764465,766264)
group by bb_id
order by bb_id

Скажите, а запрос именно такой, как написано, вы его скопировали из профайлера?
21 июн 05, 10:11    [1635389]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Glory
Member

Откуда:
Сообщений: 104760
Есть ли индекс по aa.bb_id ?
21 июн 05, 10:18    [1635427]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Kulavert
Member

Откуда:
Сообщений: 341
Да, запрос именно такой.
Индекс тоже есть.

Измененный запрос помог
Roman S. Golubin

Pr0ger недоглядел:

select convert(int,bb_id) bb_id, count(*)
from aa
where Dat>='20040101'
AND convert(int,bb_id) IN (778622,778639,3001053,3021206,3025438,3025686,745719,764465,766264)
group by convert(int,bb_id)
order by convert(int,bb_id)

Теперь выдает то что надо. Но осталось ощущение, что что-то не так!
Теперь что, нельзя верить Numeric(10,0) ???!!
Может сделать
UPDATE aa SET bb_id=COVERT(int,bb_id)
???
22 июн 05, 12:32    [1639647]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Glory
Member

Откуда:
Сообщений: 104760
Измененный запрос помог
Из-за convert-а индекс по aa.bb_id не используется.
А в первоначальном запросе наверняка используется
22 июн 05, 12:38    [1639677]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Kulavert
Member

Откуда:
Сообщений: 341
Из-за convert-а индекс по aa.bb_id не используется.
А в первоначальном запросе наверняка используется[/quot]
Согласен, если оптимизатор не слишком продвинутый.
22 июн 05, 12:40    [1639688]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Glory
Member

Откуда:
Сообщений: 104760
Kulavert
Из-за convert-а индекс по aa.bb_id не используется.
А в первоначальном запросе наверняка используется

Согласен, если оптимизатор не слишком продвинутый.[/quot]
Думаю дело не в оптимизаторе а в в индексе. Что за индекс ?
22 июн 05, 12:42    [1639709]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
pr0ger
Member

Откуда: Москва
Сообщений: 1933
http://support.microsoft.com/default.aspx?scid=kb;en-us;297063
22 июн 05, 12:47    [1639731]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
pr0ger
Member

Откуда: Москва
Сообщений: 1933
Дело в сервис паке, точнее в его отсутвии
22 июн 05, 12:49    [1639745]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Kulavert
Member

Откуда:
Сообщений: 341
pr0ger
Дело в сервис паке, точнее в его отсутвии

Ок, согласен. Думаю, что вопрос закрыт.
22 июн 05, 13:11    [1639859]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Glory
Member

Откуда:
Сообщений: 104760
Kulavert
pr0ger
Дело в сервис паке, точнее в его отсутвии

Ок, согласен. Думаю, что вопрос закрыт.

Мне все таки интересно - БЕЗ каких либо индексов на bb_id оригинальный запрос сработает ?
22 июн 05, 13:17    [1639893]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Kulavert
Member

Откуда:
Сообщений: 341
Мне все таки интересно - БЕЗ каких либо индексов на bb_id оригинальный запрос сработает ?

Интерес, конечно, и у меня есть, но думаю, он останется неудовлетворен, так сносить и восстанавливать индекс и вызвать тем самым возгласы пользователей о "жутком торможении работы" совсем не хочется...
Сейчас проведу эксперимент на каком-нибудь бэкапе...
22 июн 05, 13:24    [1639925]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Kulavert
Member

Откуда:
Сообщений: 341
Эксперимент показал, что на бэкапе оригинальный запрос дает такие же правильные результаты, как и скорректированный. Вот так...
22 июн 05, 13:33    [1639977]     Ответить | Цитировать Сообщить модератору
 Re: Глючит MS SQL :(  [new]
Glory
Member

Откуда:
Сообщений: 104760
Kulavert
Эксперимент показал, что на бэкапе оригинальный запрос дает такие же правильные результаты, как и скорректированный. Вот так...

А причем здесь бекап ?
22 июн 05, 13:34    [1639983]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить