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

Откуда: Moscow
Сообщений: 2480
Блог
o-o
про sys.dm_db_database_page_allocations (>=2012)
мало, что нет никакого хэлпа,
так оно еще и показывает пустыми next_page_file_id, next_page_page_id.
и пойди им пожалуйся, что пустые, может, это так задумано
так что dbcc ind рулит

select next_page_file_id, next_page_page_id from sys.dm_db_database_page_allocations(db_id('opt'), object_id('t1'),null, null, 'DETAILED')

Если вдруг кому пригодится, для более полезных нужд, чем тут...
22 сен 15, 15:09    [18180827]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
SomewhereSomehow,

у меня DETAILED!!!
и не пашет :(

Microsoft SQL Server 2012 - 11.0.5569.0 (Intel X86) Jan 9 2015 11:41:41 Copyright (c) Microsoft Corporation Developer Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
22 сен 15, 15:13    [18180843]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest


К сообщению приложен файл. Размер - 92Kb
22 сен 15, 15:13    [18180845]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
o-o,

У меня нормально работает, версии:
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Microsoft SQL Server 2014 - 12.0.2495.0 (X64)
22 сен 15, 15:15    [18180855]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
на 2014-ом да, отработал.
поразительный тормоз.
прошу топ 10 без order by.
думал 22 секунды.
таблица, конечно, в 500Мб, но почему так долго на какие-то 10 страниц?
22 сен 15, 15:20    [18180881]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
o-o,

Не такой случай?

use master;
go
drop database testdb;
go
create database testdb;
go
use testdb;
go
create table t1(a int);
go
insert t1(a) select a from opt.dbo.t1;
go
select extent_file_id, extent_page_id, is_mixed_page_allocation, page_type_desc,  next_page_file_id, next_page_page_id from sys.dm_db_database_page_allocations(db_id('testdb'), object_id('t1'),null, null, 'DETAILED')
go
alter table t1 rebuild;
go
select extent_file_id, extent_page_id, is_mixed_page_allocation, page_type_desc, next_page_file_id, next_page_page_id from sys.dm_db_database_page_allocations(db_id('testdb'), object_id('t1'),null, null, 'DETAILED')
go
22 сен 15, 15:22    [18180904]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
SomewhereSomehow
У меня нормально работает, версии:
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)

чем больше паков, тем наглее себя ведет
o-o
11.0.5569.0 (Intel X86)
22 сен 15, 15:23    [18180907]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
SomewhereSomehow,

нет, абсолютно не такой.
даже могу предъявить, что это было:
create table dbo.t1
(id int identity, ch char(7000), bigcol text);
go
insert into dbo.t1 (ch, bigcol)
select 'ch', replicate(convert(varchar(max), 'a'), 38000);
go 5

т.e. смотрю, как он ЛОБы разместил,
потом их надо было удалить и посмотреть, что пошло в лог, руки не дошли.

задайте любой скрипт заполнения таблички, выполню и покажу результат
22 сен 15, 15:29    [18180955]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
create table dbo.t2 (id int identity, c char(7000));
go
insert into dbo.t2 default values;
go 20

select @@version;

select 
       allocated_page_file_id as PageFID, 
       allocated_page_page_id as PagePID,
       allocation_unit_type_desc, 
       page_type_desc, 
       next_page_file_id,
       next_page_page_id
from sys.dm_db_database_page_allocations(db_id(), object_id('dbo.t2'),null, null, 'DETAILED');


К сообщению приложен файл. Размер - 86Kb
22 сен 15, 15:37    [18181020]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
o-o,

Вот ваш скрипт заполнения как у меня отрабатывает.
+
use master;
go
drop database testdb;
go
create database testdb;
go
use testdb;
go
create table dbo.t1 (id int identity, ch char(7000), bigcol text);
go
insert into dbo.t1 (ch, bigcol) select 'ch', replicate(convert(varchar(max), 'a'), 38000);
go 5
select extent_file_id, extent_page_id, is_mixed_page_allocation, page_type_desc,  next_page_file_id, next_page_page_id from sys.dm_db_database_page_allocations(db_id('testdb'), object_id('t1'),null, null, 'DETAILED')
go
DBCC IND (0,'t1',1)
go
alter table t1 rebuild;
go
select extent_file_id, extent_page_id, is_mixed_page_allocation, page_type_desc, next_page_file_id, next_page_page_id from sys.dm_db_database_page_allocations(db_id('testdb'), object_id('t1'),null, null, 'DETAILED')
go
DBCC IND (0,'t1',1)


У вас по-другому?

К сообщению приложен файл. Размер - 78Kb
22 сен 15, 15:38    [18181032]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Запрос висит бесконечно, если его выполнять не для текущей базы...
22 сен 15, 15:44    [18181060]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
SomewhereSomehow,

секунду, мне надо подумать, что я несу.
на ваш вопрос ответ да,
все правильно.
только у меня сегодня dbcc ind выдавал предыдущую и след. страницы
(еще на 2008-ом на *вчерашних* данных,
но я не помню, что же было вчера, вот в чем ужас!!!)
а я еще думаю, какие кучи пошли продвинутые, двусвязные.
какие-то у меня большие сомнения по поводу той "вчерашней" кучи.
но ребилда не помню.
куча была, ЛОБы были, что откуда взялось?
22 сен 15, 15:53    [18181109]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
еще бы ребилда не было.
я вообще не в той базе делаю, не во вчерашней.
у меня во всех базах dbo.t, dbo.t1,... .
и таблица та -- кластерная, вот.
извиняюсь :)
22 сен 15, 16:04    [18181159]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
подождите, но в 2014-ом тоже куча, правда готовая уже, не из того скрипта.
и на ней показывает все эти предыдущие/следующие страницы и думает 22 секунды (даже 29 во второй раз).
это что такое???

К сообщению приложен файл. Размер - 128Kb
22 сен 15, 16:17    [18181225]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
таблица на первой картинке не та, вот правильная, но все равно куча

К сообщению приложен файл. Размер - 28Kb
22 сен 15, 16:20    [18181243]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
o-o
...


неужели он проходя IAM цепочку делает так:

1) для страниц внутри экстанта nextpageid указывает на следующую в экстенте страницу
2) для последней страницы экстента, следующую страницу определяет по первой странице экстента следующего после текущего экстента согластно инфе в IAM страницах цепочки...
22 сен 15, 16:27    [18181283]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
офигеть, граждане,
это не 2014, это просто SELECT INTO из кластерной таблицы.
и никаких ребилдов.
вот на 2012-ом все то же самое.
я просто помню, что те 500Мб на 2014-ом -- это SELECT INTO с 2008-ого, где таблица кластерная
create table dbo.t (id int identity primary key clustered, c char(8000));
go
insert into dbo.t default values
go 20

select *
into dbo.t2
from dbo.t;
go

select 
       allocated_page_file_id as PageFID, 
       allocated_page_page_id as PagePID,
       allocation_unit_type_desc, 
       page_type_desc, 
       next_page_file_id,
       next_page_page_id
from sys.dm_db_database_page_allocations(db_id(), 
object_id('dbo.t'),null, null, 'DETAILED')
order by page_type_desc desc;

select 
       allocated_page_file_id as PageFID, 
       allocated_page_page_id as PagePID,
       allocation_unit_type_desc, 
       page_type_desc, 
       next_page_file_id,
       next_page_page_id
from sys.dm_db_database_page_allocations(db_id(), 
object_id('dbo.t2'),null, null, 'DETAILED')
order by page_type_desc desc;

по типу сортирую, чтоб видно было, во второй таблице индексных страниц нет, это куча

К сообщению приложен файл. Размер - 84Kb
22 сен 15, 17:00    [18181504]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
o-o,

можно попробовать задампить IAM страницы и проверить это предположение 18181283
22 сен 15, 17:17    [18181642]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1741
Можно вопрос?
А добавить при создании таблицы второе поле timestamp или rowversion - нельзя?
22 сен 15, 17:22    [18181688]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
o-o
это просто SELECT INTO из кластерной таблицы.
Можно просто убить кластерный - эффект будет такой же.
Но это не значит, что этими ссылками можно пользоваться :)
22 сен 15, 17:27    [18181741]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
invm,
ссыли не левые и не с кластерного скопированные,
а честно указывают на след. страницу.
получается, что куча, полученная копированием кластерной таблицы,
имеет привилегии по сравнению с кучей, полученной из кучи
22 сен 15, 17:36    [18181793]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
o-o
Guest
DaniilSeryi
Можно вопрос?
А добавить при создании таблицы второе поле timestamp или rowversion - нельзя?

даже если добавить, вариант пролетит,
если были апдэйты.
т.е. если у нас были значения 1,2,3
сделали апдэйт 2 --> 4,
на странице будет лежать 1,4,3,
а сортировка по timestamp выдаст 1,3,4

уж если добавлять, то тогда уж identity,
или вообще какой-то свой счетчик,
но тогда в чем вопрос задачи,
если можно что угодно добавить?
22 сен 15, 17:43    [18181817]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
художества

К сообщению приложен файл. Размер - 80Kb
22 сен 15, 17:56    [18181876]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
страницы из shared екстентов nextpageid = null

К сообщению приложен файл. Размер - 66Kb
22 сен 15, 17:59    [18181891]     Ответить | Цитировать Сообщить модератору
 Re: Как в таблице куче получить порядок строк  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
а об чем тема то была? про автора уже совсем забыли...
22 сен 15, 18:00    [18181894]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить