Гость
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Использование индекса для сортировки / 25 сообщений из 33, страница 1 из 2
25.08.2012, 00:20
    #37929993
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
почему следующий запрос в упор не хочет использовать индекс при сортировке результата?
что нужно сделать, чтобы уговорить его изменить свое мнение?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
IF OBJECT_ID ('dbo.test1') IS NOT NULL
	DROP TABLE dbo.test1
GO

CREATE TABLE dbo.test1
	(
	int1                INT NULL,
	numb1               numeric(10) NULL,
	int2                INT NULL,
	vchar1              varchar(10),
	)
GO

CREATE CLUSTERED INDEX XPKTest1
	ON dbo.Test1  (int1,numb1,int2)
GO



Код: sql
1.
2.
3.
select int1,numb1,int2
 from Test1 (index XPKTest1)
 order by int1,numb1,int2


QUERY PLAN FOR STATEMENT 1 (at line 1).
STEP 1
The type of query is INSERT.
The update mode is direct.
Worktable1 created, in allpages locking mode, for ORDER BY.
FROM TABLE
Test1
Nested iteration.
Using Clustered Index.
Index : XPKTest1
Forward Scan.
Positioning at index start.
Index contains all needed columns. Base table will not be read.
Using I/O Size 8 Kbytes for index leaf pages.
With LRU Buffer Replacement Strategy for index leaf pages.
TO TABLE
Worktable1.
STEP 2
The type of query is SELECT.
This step involves sorting.
FROM TABLE
Worktable1.
Using GETSORTED
Table Scan.
Forward Scan.
Positioning at start of table.
Using I/O Size 8 Kbytes for data pages.
With MRU Buffer Replacement Strategy for data pages.


Код: sql
1.
select @@version


Adaptive Server Enterprise/15.0.3/EBF 19956 ESD#4.1/P/NT (IX86)/Windows 2003/ase1503/2782/32-bit/OPT/Tue Jun 12 23:37:46 2012
...
Рейтинг: 0 / 0
26.08.2012, 21:46
    #37930939
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
SortSybASE,

Using Clustered Index.
Index : XPKTest1
а это что по вашему?
...
Рейтинг: 0 / 0
26.08.2012, 22:19
    #37930956
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
cherrex_Den,
что угодно, но не использование индекса для сортировки.

как видно из описания, оно создает временную таблицу для сортировки

Worktable1 created, in allpages locking mode, for ORDER BY.

на реальных данных(~600 тысяч строк) из-за этой лишней операции происходит переполнение tempdb
...
Рейтинг: 0 / 0
26.08.2012, 22:39
    #37930968
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
SortSybASE,

я бы попробовал следующее:
1) убрать null из полей таблицы
2) явно указать порядок сортировки полей при создании индекса
3) накатить последний ebf или взять последнюю версию 15.5 - есть сильно ненулевая вероятность отсебятины ASE ранних версий 15-шки
...
Рейтинг: 0 / 0
26.08.2012, 22:49
    #37930971
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
komrad,

1) таблица стейджинговая, наполняется данными во время работы отчета. сначала частью, затем обогащается.
2) пробовал, не помогает.
3) сервер чужой, не получится...
...
Рейтинг: 0 / 0
26.08.2012, 23:18
    #37930983
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
SortSybASEkomrad,

1) таблица стейджинговая, наполняется данными во время работы отчета. сначала частью, затем обогащается.
2) пробовал, не помогает.
3) сервер чужой, не получится...

а order by убрать?
кластерный индекс и так позволит получить данные в порядке ключа индекса
...
Рейтинг: 0 / 0
26.08.2012, 23:24
    #37930987
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
komrad,

в данный момент за отсутствием других способов так и сделано, потому как иначе отчет вообще не строится.
но не хотелось бы отдавать данную операцию на откуп серверу, мало ли что ему в очередной раз взгрустнется?
...
Рейтинг: 0 / 0
26.08.2012, 23:26
    #37930989
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
SortSybASEkomrad,

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

ясно

а с некластерным индексом поведение аналогично?
а скорость построения отчета?
...
Рейтинг: 0 / 0
26.08.2012, 23:29
    #37930993
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
SortSybASE
на реальных данных(~600 тысяч строк) из-за этой лишней операции происходит переполнение tempdb

а размер tempdb какой?
таблица не широкая, размер записи мал, 600 тысяч не большое кол-во ...
...
Рейтинг: 0 / 0
26.08.2012, 23:36
    #37930999
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
komradа с некластерным индексом поведение аналогично?
а скорость построения отчета?
неклсатерным создавал его изначально. когда не помогло - попробовал сделать кластерным.
отчет тяжелый, строится долго. полчаса-час.

на деле таблица заметно шире представленной, и сортировка там идет по 7 полям.
но проблема с планом запроса воспроизводится на любом количестве полей и записей, разве что темпдб не переполняется...
...
Рейтинг: 0 / 0
27.08.2012, 00:20
    #37931027
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
SortSybASEkomradа с некластерным индексом поведение аналогично?
а скорость построения отчета?
неклсатерным создавал его изначально. когда не помогло - попробовал сделать кластерным.
отчет тяжелый, строится долго. полчаса-час.
на деле таблица заметно шире представленной, и сортировка там идет по 7 полям.

кластерный по 7-ми полям строится на пустой таблице, так?


SortSybASEно проблема с планом запроса воспроизводится на любом количестве полей и записей, разве что темпдб не переполняется...
полагаю, что это особенность ранних версий 15-шки
не зря после esd 4.1 идет сразу 15.5

вот например классная ошибка:
When the ASE ESD number is not an integer (e.g. 1.1, 4.1 or 5.1 etc), then anything using the sp_versioncrack stored procedure (e.g. sp_spaceusage) may encounter a 249 error (conversion error).


а чему равно

Код: sql
1.
sp_configure "optimizer level"
...
Рейтинг: 0 / 0
27.08.2012, 10:28
    #37931298
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
komradкластерный по 7-ми полям строится на пустой таблице, так?

ага

Код: sql
1.
sp_configure "optimizer level"



Parameter NameDefaultMemory UsedConfig ValueRun ValueUnitTypeoptimizer levelase_default 0ase_defaultase_defaultnumberdynamic
...
Рейтинг: 0 / 0
27.08.2012, 19:52
    #37932503
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
SortSybASE,

А нафига вообще что-то сортировать на сервере?
ORDER BY это на мой взгляд вообще не нужная вещь. То есть совсем не нужная.
Всю сортировку надо делать на клиенте.
...
Рейтинг: 0 / 0
27.08.2012, 20:51
    #37932546
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
White OwlА нафига вообще что-то сортировать на сервере?

а также, для чего на серверной стороне обработка XML, к чему вообще создан процедурный подход, кто придумал курсоры и много других философских вопросов...

Если по теме - то клиентская часть подлежит настройке, но не доработке.
...
Рейтинг: 0 / 0
27.08.2012, 21:12
    #37932560
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
SortSybASEWhite OwlА нафига вообще что-то сортировать на сервере?

а также, для чего на серверной стороне обработка XML, к чему вообще создан процедурный подход, кто придумал курсоры и много других философских вопросов...Твои философские вопросы ехидны. Мой реален.

SortSybASEЕсли по теме - то клиентская часть подлежит настройке, но не доработке.Именно что настройке.
Если ты на сервере делаешь сортировку по возрастанию алфавита, а клиент хочет обратную сортировку или вообще сортировать по другому полю? Ты будешь сортировать дважды? Сначала на сервере, потом на клиенте? Ну-ну...
Да еще и объемы в 600 тысяч строк...

Так я повторяю свой вопрос: Нафига сортировать на сервере? Какой реальный выигрыш ты надеешься получить от решения своей задачи?
...
Рейтинг: 0 / 0
27.08.2012, 21:33
    #37932565
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
White Owl,

все мои ехидные вопросы периодически всплывают в качестве ответов.

Снова по теме. представьте себе "черный ящик", на вход которого требуется подать отсортированный поток данных. Это будет практически то, что есть в данном случае.
...
Рейтинг: 0 / 0
28.08.2012, 01:57
    #37932751
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
> CREATE TABLE dbo.test1
> (
> int1INT NULL,
> numb1numeric(10) NULL,
> int2INT NULL,
> vchar1varchar(10),
> )


Схема блокирования таблицы какая ?
Если DOL, то таблица реально не сортирована по этому
ключу и соответственно не может быть поводом для оптимизации ORDER BY.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.08.2012, 11:08
    #37933103
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
MasterZiv,
каюсь, грешен, пока не знаю как посмотреть.
но по идее вроде заявлено, что при попадании в индекс сервер должен им пользоваться для сортировки.
и в требованиях стоит только чтоб он был покрывающим и порядок сортировки был либо прямой, либо обратный.

даже кластеризованным он быть не обязан. Кластеризованным я его сделал, чтобы убрать order by совсем.
Но, как Вы заметили, при схеме DOL физический порядок строк не гарантируется...
...
Рейтинг: 0 / 0
28.08.2012, 13:39
    #37933491
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
SortSybASE,

Нет, все правильно! Индекс должен использоваться.
ASE 15.7 ESD#2

Есть уникальный не кластерный индекс по полям которые в order by(порядок тотже)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
*
from crg_specification
order by 
railcar, 
waybill, 
certificate, 
order_position,
certificate_num, 
shipper_code, 
order_num, 
is_del



планQUERY PLAN FOR STATEMENT 1 (at line 1).
Optimized using Parallel Mode


STEP 1
The type of query is SELECT.

1 operator(s) under root

|ROOT:EMIT Operator (VA = 1)
|
| |SCAN Operator (VA = 0)
| | FROM TABLE
| | crg_specification
| | Index : uniq_spec_itm
| | Forward Scan.
| | Positioning at index start.
| | Using I/O Size 64 Kbytes for index leaf pages.
| | With LRU Buffer Replacement Strategy for index leaf pages.
| | Using I/O Size 64 Kbytes for data pages.
| | With LRU Buffer Replacement Strategy for data pages.


Так что, проблема в оптимизаторе, или в его настройках.
...
Рейтинг: 0 / 0
28.08.2012, 13:46
    #37933498
moris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
SortSybASE,
>каюсь, грешен, пока не знаю как посмотреть

select case
when sysstat2 & 57344 =8192 then 'Table uses allpages locking scheme.'
when sysstat2 & 57344 =16384 then 'Table uses datapages locking scheme.'
when sysstat2 & 57344 =32768 then 'Table uses datapages locking scheme.'
end
from sysobjects where name='test1'


Во первых, попробуйте обновить статистику.
Если статистика актуальна, то это похоже на баг оптимизатора. При работе с ASE до 15.5 было замечено достаточно много багов в оптимизаторе как в native mode, так и в compatible mode.
Причем с native оптимизатором решать проблемы можно значительно проще используя хотя-бы параметр "optimizer level", или явно настраивая опции оптимизатора.
В вашем случае, судя по плану, используется compatible mode. поэтому никаких "костылей" для устранения такого неоптимального плана не получится использовать.
Проверил у себя на ASE15.5 ESD4 , (таблица содержит 160 000 строк) . Планы ожидаемые, как в родном режиме оптимизатора так и в режиме совместимости

Для compatible mode

FROM TABLE
test1
Nested iteration.
Using Clustered Index.
Index : XPKTest1
Forward Scan.
Positioning at index start.
Index contains all needed columns. Base table will not be read.
Using I/O Size 4 Kbytes for index leaf pages.
With LRU Buffer Replacement Strategy for index leaf pages.
...
Рейтинг: 0 / 0
28.08.2012, 13:57
    #37933516
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
moris,
спасибо!

Я правда, уже в явном виде пытался пересоздать таблицу с использованием lock allpages. Не помогло.
...
Рейтинг: 0 / 0
28.08.2012, 14:10
    #37933549
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
cherrex_DenSortSybASE,

Нет, все правильно! Индекс должен использоваться.

Правильно, что должен использоваться.

MasterZiv же говорил, видимо об этом(немного выдрано из контекста, но смысл вроде как понятен)
A clustered index on a DOL table is STILL a placement index and
therefore behaves EXACTLY as a clustered index on APL. The only
difference (and all of this is documented) that in the "placement", we
do not escalate locks to strictly enforce order - so the row may be put
at the end of the page, or in the middle of page - where there is space
- or on a new page in same extent - the goal is to place the row NEAR
where it needs to go
...
Рейтинг: 0 / 0
28.08.2012, 14:56
    #37933643
Использование индекса для сортировки
SortSybASE,

Index contains all needed columns. Base table will not be read.
...

Для данного примера схема блокировки таблицы не важна.
Что APL, что DOL. Это index covered scan.
Кстати кластерным индекс тоже может не быть.

Временная таблица не должна создаваться для index covered scan, если порядок колонок в индексе и направление ASC/DESC совпадают с порядком в order by.
...
Рейтинг: 0 / 0
28.08.2012, 15:16
    #37933692
SortSybASE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса для сортировки
забыл парольSortSybASE,
Временная таблица не должна создаваться для index covered scan, если порядок колонок в индексе и направление ASC/DESC совпадают с порядком в order by.
Весь вопрос состоит в том, как заставить сервер понять это.

Кластеризованный индекс создал, чтобы убрать конструкцию order by.
но мне такое решение не нравится и видится неверным.
...
Рейтинг: 0 / 0
28.08.2012, 15:41
    #37933772
Использование индекса для сортировки
SortSybASE,

ASE15.5 ESD4
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Использование индекса для сортировки / 25 сообщений из 33, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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