powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / неправильно отрабатывает запрос
23 сообщений из 23, страница 1 из 1
неправильно отрабатывает запрос
    #39919533
Drobodan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть запрос. возвращает 0 записей (отрабатывает за секунду, блокировок нет):

Код: sql
1.
2.
3.
4.
select top 10 sm.[ClientId]
from billing.[sortmaster] sm with(nolock)
join SMART_DWH.customers c with(nolock)	on c.ID = sm.ClientId
join SMART_DWH.datablock d with(nolock) on c.BlockID = d.ID


Если к этому запросу добавить where d.SourceID = 30:
Код: sql
1.
2.
3.
4.
5.
select top 10 sm.[ClientId]
from billing.[sortmaster] sm with(nolock)
join SMART_DWH.customers c with(nolock)	on c.ID = sm.ClientId
join SMART_DWH.datablock d with(nolock) on c.BlockID = d.ID
where d.SourceID = 30



то он возвращает 10 записей.
Как такое может быть? Это я в этой жизни что то не понимаю? Или с базой проблемы?
Ошибочно отрабатывает первый запрос
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919536
ДваждыДва
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Drobodan
Добрый день.
Есть запрос. возвращает 0 записей (отрабатывает за секунду, блокировок нет):

Код: sql
1.
2.
3.
4.
select top 10 sm.[ClientId]
from billing.[sortmaster] sm with(nolock)
join SMART_DWH.customers c with(nolock)	on c.ID = sm.ClientId
join SMART_DWH.datablock d with(nolock) on c.BlockID = d.ID


Если к этому запросу добавить where d.SourceID = 30:
Код: sql
1.
2.
3.
4.
5.
select top 10 sm.[ClientId]
from billing.[sortmaster] sm with(nolock)
join SMART_DWH.customers c with(nolock)	on c.ID = sm.ClientId
join SMART_DWH.datablock d with(nolock) on c.BlockID = d.ID
where d.SourceID = 30



то он возвращает 10 записей.
Как такое может быть? Это я в этой жизни что то не понимаю? Или с базой проблемы?
Ошибочно отрабатывает первый запрос


dbcc checkdb делали?
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919538
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Drobodan,

могут быть проблемы с индексами.
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919543
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Drobodan,

Перестроить индексы для начала
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919545
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Drobodan
Добрый день.
Есть запрос. возвращает 0 записей (отрабатывает за секунду, блокировок нет):

Код: sql
1.
2.
3.
4.
select top 10 sm.[ClientId]
from billing.[sortmaster] sm with(nolock)
join SMART_DWH.customers c with(nolock)	on c.ID = sm.ClientId
join SMART_DWH.datablock d with(nolock) on c.BlockID = d.ID



Если к этому запросу добавить where d.SourceID = 30:
Код: sql
1.
2.
3.
4.
5.
select top 10 sm.[ClientId]
from billing.[sortmaster] sm with(nolock)
join SMART_DWH.customers c with(nolock)	on c.ID = sm.ClientId
join SMART_DWH.datablock d with(nolock) on c.BlockID = d.ID
where d.SourceID = 30




то он возвращает 10 записей.
Как такое может быть? Это я в этой жизни что то не понимаю? Или с базой проблемы?
Ошибочно отрабатывает первый запрос


А если убрать with(nolock)?


грязное чтение на то и грязно, что при чтении из разных индексов можно получить разные данные
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919550
Drobodan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДваждыДва,

нет, не делал. Для проверки DBCC CHECKDB запустил перевод базы в SINGLE_USER режим. пока висит
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919551
Drobodan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,
без nolock результат то же
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919571
ДваждыДва
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Drobodan
ДваждыДва,

нет, не делал. Для проверки DBCC CHECKDB запустил перевод базы в SINGLE_USER режим. пока висит


ну в синг это вы дали маху)
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919605
Фотография PaulYoung
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Drobodan,

а где в вашем запросе ORDER BY ?
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919610
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulYoung
Drobodan,

а где в вашем запросе ORDER BY ?

отсутствие ORDER BY не объясняет 0 vs 10 записей
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919927
Drobodan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов и TaPaK,
Вы скорее всего правы. Дело в индексах и вот почему:
изменив запрос на
Код: sql
1.
2.
3.
4.
select top 10 sm.[ClientId]
from billing.[sortmaster] sm with(nolock)
join SMART_DWH.customers c with(nolock)	on c.ID+0= sm.ClientId
join SMART_DWH.datablock d with(nolock) on c.BlockID = d.ID


запрос выполнился правильно, вывелось 10 записей.
добавлением +0 убрал поиск по индексу
Пришел к выводу, что дело в индексе PK_client (поле id таблицы SMART_DWH.customers)
вот эта конструкция

Код: sql
1.
2.
3.
4.
5.
 CONSTRAINT [PK_client] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]



Попытка его реорганизовать
Код: sql
1.
ALTER INDEX [PK_client] ON [SMART_DWH].[customers] REORGANIZE


завершилась с ошибками вида
The operating system returned error 665(The requested operation could not be completed due to a file system limitation) to SQL Server during a write at offset 0x00009872efc000 in file 'D:\Data\SMART_DWH.mdf:MSSQL_DBCC17'.
Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level error condition that threatens database integrity and must be corrected immediately.
Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.

попытка выполнить
exec('DBCC CHECKDB (''SMART_DWH'') WITH tableresults')
закончилась, после 5 часов выполнения, следующей ошибкой:

Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.


После чего решил запустить REBUILD индекса:
Код: sql
1.
 ALTER INDEX [PK_client] ON [SMART_DWH].[customers] REBUILD


Данный скрипт отработал за 30 минут успешно.
Проверил результат изначальным запросом
Код: sql
1.
2.
3.
4.
select top 10 sm.[ClientId]
from billing.[sortmaster] sm with(nolock)
join SMART_DWH.customers c with(nolock)	on c.ID+0= sm.ClientId
join SMART_DWH.datablock d with(nolock) on c.BlockID = d.ID


Вернул 10 записей. На этом, казалось что все - вопрос решен.
Но запустив этот же запрос не на top 10, а на top 100 получил 0 строк.
В планах выполнения этих 2 запросов появилось 1 отличие:
во втором запросе появился Key Lookup(Сlustered) [customers].[PK_client] [c]
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919933
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Drobodan,

у Вас не SSD ли "посыпалась"? У меня было так - разночтения. На SSD контроллер сдох.
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919935
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Drobodan,

Additional messages in the SQL Server error log and system event log may provide more detail.

А это вы глянули? Что там?
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919937
Drobodan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Диспетчер устройст пишет
vmware virtual disk scsi disk device
Объем 5.18TB
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919939
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Drobodan,

что в полном логе сообщения? Я бы перестраивал всю таблицу/ы участвующие. DBCC после перестроения и смотреть в сторону винтов

Ну и пока DBCC гонит ошибки готовить три письма если это не смущает :)
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919952
Drobodan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В файле журнала SQL сервера ничего нового не обнаружил:

Куча ошибок вида
"The operating system returned error 665(The requested operation could not be completed due to a file system limitation) to SQL Server during a write at offset 0x00009872efc000 in file 'D:\Data\SMART_DWH.mdf:MSSQL_DBCC17'.
Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level error condition that threatens database integrity and must be corrected immediately.
Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online."
где меняется только адреса (0x00009872efc000)
Очень похоже что моя ошибка описана https://support.microsoft.com/en-us/help/2002606/os-errors-1450-and-665-are-reported-for-database-data-files
Файловая система NTFS
Размер файл D:\Data\SMART_DWH.mdf 1.7TB
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919955
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Drobodan,

диски переразмечали? а вообще идите к тому чей физический диск у вас в виртуалке
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39919959
Drobodan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,
нет, диски не переразмечал
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39920074
Сруль.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слово where поменяйте на and.
Единообразия для.
Вторым шагом-join на inner join.
Чтоб не было умолчаний.
Третий шаг, уберите NOLOCK.
Смысл такой, что когда непонятка, надо упростить запрос до максимум возможного.
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39920098
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСлово where поменяйте на and.
Единообразия для.
Вторым шагом-join на inner join.
золотой фонд бесполезных советов?
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39920099
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Ну как же без этого. А капаот открыть? А по колесу постучать?
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39920101
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
TaPaK,

Ну как же без этого. А капаот открыть? А по колесу постучать?

когда начнут предлагать перегрузить результат может стать неожиданным
...
Рейтинг: 0 / 0
неправильно отрабатывает запрос
    #39923985
Drobodan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решилась созданием новой файловой группы на отдельном диске. с последующем переносом индексов в эту группу.


на странице https://docs.microsoft.com/ru-ru/sql/relational-databases/indexes/move-an-existing-index-to-a-different-filegroup?view=sql-server-2017 указанны следующие ограничения:
Если таблица имеет кластеризованный индекс (а PK_client кластеризованный), то перемещение кластеризованного индекса в новую файловую группу перемещает в эту файловую группу саму таблицу.
В среде Среда Management Studioнельзя перемещать индексы, созданные с помощью ограничения UNIQUE или PRIMARY KEY. Для перемещения этих индексов используйте инструкцию CREATE INDEX с параметром (DROP_EXISTING=ON) в Transact-SQL.


Учитывая эту информацию для переноса кластеризованного индекса [PK_client] (как и всей таблицы [customers]) пришлось использовать параметр DROP_EXISTING=ON:
Код: sql
1.
2.
3.
4.
CREATE unique clustered INDEX [PK_client] ON [SMART_DWH].[customers]
([ID] ASC)
WITH (DROP_EXISTING=ON,PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [FG_IDX]
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / неправильно отрабатывает запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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