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

Откуда:
Сообщений: 6
Подскажите, что такое master.sys.objects? Каким образом заполняется таблица TallyNumbers? Как ниже приведенный кусок кода будет выглядеть на postgresql?

IF OBJECT_ID('dbo.TallyNumbers') IS NULL
    BEGIN
        CREATE TABLE dbo.TallyNumbers ( Number INT NOT NULL )
        INSERT  INTO dbo.TallyNumbers
         ( Number
        )
        SELECT TOP ( 1000000 )
          ROW_NUMBER() OVER ( ORDER BY A.OBJECT_ID ) - 1 AS Number
        FROM    master.sys.objects AS A
                CROSS JOIN master.sys.objects AS B
                CROSS JOIN master.sys.objects AS C
                CROSS JOIN master.sys.objects AS D
    END
26 июн 16, 15:46    [19336918]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
aleks2
Guest
Дык, говнокод детектед.

Неважно, что это за таблица. Здесь это просто "любая длинная таблица".
26 июн 16, 15:53    [19336932]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
aleks2
Guest
Ах да, на любом диалекте это = "заполнить таблицу TallyNumbers целыми от 0 до 999999".
26 июн 16, 15:56    [19336936]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
Ну почему говнокод... Таблица гарантированно существует.
27 июн 16, 11:44    [19339232]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Владислав Колосов
Ну почему говнокод...
Потому что для решения такой задачи не нужны ни опорная таблица, ни сортировка по столбцу в over.
27 июн 16, 12:16    [19339433]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
i-i
Guest
invm, stesnajus sprosit' - a mogno vzglanut na vash variant zapolnenija?

zamena sortirovku v over na sortirovku po peremennoy perevedet kod v razrad ne govnokoda? ;)
27 июн 16, 21:44    [19342354]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
i-i
a mogno vzglanut na vash variant zapolnenija?
Можно.
with
 l0(n) as (select 1 union all select 1),
 l1(n) as (select 1 from l0 a cross join l0 b),
 l2(n) as (select 1 from l1 a cross join l1 b),
 l3(n) as (select 1 from l2 a cross join l2 b),
 l4(n) as (select 1 from l3 a cross join l3 b),
 l5(n) as (select 1 from l4 a cross join l4 b)
insert into Таблица (Number) with (tablock)
select top (1000000)
 row_number() over (order by (select 1))
from
 l5;
27 июн 16, 22:31    [19342576]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
o-o
Guest
i-i
invm, stesnajus sprosit' - a mogno vzglanut na vash variant zapolnenija?
zamena sortirovku v over na sortirovku po peremennoy perevedet kod v razrad ne govnokoda? ;)

сайт http://translit.net/ избавит всех от ломания глаз об вашу латиницу.
пользуйтесь на здоровье (ваше и всеобщее)
28 июн 16, 00:29    [19342886]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
Рекурсивный CTE тоже достаточно быстро работает и без нумерации - сортировки.
Скажем, намного быстрее, чем с кросс-таблицами первого варианта.
28 июн 16, 12:52    [19344742]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Владислав Колосов
Рекурсивный CTE тоже достаточно быстро работает и без нумерации - сортировки.
Скажем, намного быстрее, чем с кросс-таблицами первого варианта.
+ Посвещается верящим в волшебную силу рекурсии
declare @n int, @c int = 1000000;

set statistics time on;

with
 l0(n) as (select 1 union all select 1),
 l1(n) as (select 1 from l0 a cross join l0 b),
 l2(n) as (select 1 from l1 a cross join l1 b),
 l3(n) as (select 1 from l2 a cross join l2 b),
 l4(n) as (select 1 from l3 a cross join l3 b),
 l5(n) as (select 1 from l4 a cross join l4 b)
select top (@c)
 @n = row_number() over (order by (select 1))
from
 l5
option
 (maxdop 1);

select top (@c)
 @n = row_number() over (order by (select 1))
from
 master.dbo.spt_values a cross join
 master.dbo.spt_values b cross join
 master.dbo.spt_values c
option
 (maxdop 1);

select top (@c)
 @n = row_number() over (order by (select 1))
from
 master.sys.all_objects a cross join
 master.sys.all_objects b cross join
 master.sys.all_objects c
option
 (maxdop 1);

with s(n) as
(
 select 1
 union all
 select n + 1 from s where n < @c
)
select
 @n = n
from
 s
option
 (maxdop 1, maxrecursion 0);

set statistics time off;


 SQL Server Execution Times:
CPU time = 187 ms, elapsed time = 189 ms.

SQL Server Execution Times:
CPU time = 156 ms, elapsed time = 152 ms.

SQL Server Execution Times:
CPU time = 188 ms, elapsed time = 174 ms.

SQL Server Execution Times:
CPU time = 8299 ms, elapsed time = 9076 ms.
28 июн 16, 13:10    [19344854]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
o-o
Guest
Владислав Колосов
Рекурсивный CTE тоже достаточно быстро работает и без нумерации - сортировки.
Скажем, намного быстрее, чем с кросс-таблицами первого варианта.

ваще в осадок выпадаю:
что может быть тормознее рекурсии,
да на большом числе строк?
28 июн 16, 13:12    [19344864]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
o-o,
омг, зачем же такой экстремизм! Если правильно жарить, то всё ОК.

+
declare @n int, @c int = 1000000;

set statistics time on;

with
 l0(n) as (select 1 union all select 1),
 l1(n) as (select 1 from l0 a cross join l0 b),
 l2(n) as (select 1 from l1 a cross join l1 b),
 l3(n) as (select 1 from l2 a cross join l2 b),
 l4(n) as (select 1 from l3 a cross join l3 b),
 l5(n) as (select 1 from l4 a cross join l4 b)
select top (@c)
 @n = row_number() over (order by (select 1))
from
 l5
option
 (maxdop 1);

select top (@c)
 @n = row_number() over (order by (select 1))
from
 master.dbo.spt_values a cross join
 master.dbo.spt_values b cross join
 master.dbo.spt_values c
option
 (maxdop 1);

select top (@c)
 @n = row_number() over (order by (select 1))
from
 master.sys.all_objects a cross join
 master.sys.all_objects b cross join
 master.sys.all_objects c
option
 (maxdop 1);

with s(n) as
(
 select 1
 union all
 select n + 1 from s where n < @c
)
select
 @n = n
from
 s
option
 (maxdop 1, maxrecursion 0);

with s(n) as
(
 select 1
 union all
 select n + 1 from s where n < 48
)
select top (100000)
 identity(int,1,1) f1
into #t1
from
 s 
 cross apply s s1
 cross apply s s2
option
 (maxdop 1);

set statistics time off;



SQL Server Execution Times:
CPU time = 203 ms, elapsed time = 213 ms.

SQL Server Execution Times:
CPU time = 172 ms, elapsed time = 169 ms.

SQL Server Execution Times:
CPU time = 172 ms, elapsed time = 175 ms.

SQL Server Execution Times:
CPU time = 12187 ms, elapsed time = 15044 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.

SQL Server Execution Times:
CPU time = 47 ms, elapsed time = 48 ms.

(строк обработано: 100000)

+
(у Вас крутячие ядра, однако!)
28 июн 16, 13:29    [19344990]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Владислав Колосов,

Вы в своем примере лихо сократили в 10 раз число строк, по сравнению с остальными :)
28 июн 16, 13:40    [19345083]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
o-o
Guest
экстремизм -- это рекурсия на хорошем объеме.
а еще мне показалось, что написали invm, что у него крутячие я..а
еще думаю, у меня до обеда не отработает, черт меня дернул запустить,
7 минут уже "жарит"
если к 13 часам не завершит, я это дело остановлю.
...но если досчитает, мне бы положено за рекурсию кому-то воздать!
28 июн 16, 13:47    [19345145]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4900
invm,

давайте прибавим

declare @n int, @c int = 10000000;

set statistics time on;

with
 l0(n) as (select 1 union all select 1),
 l1(n) as (select 1 from l0 a cross join l0 b),
 l2(n) as (select 1 from l1 a cross join l1 b),
 l3(n) as (select 1 from l2 a cross join l2 b),
 l4(n) as (select 1 from l3 a cross join l3 b),
 l5(n) as (select 1 from l4 a cross join l4 b)
select top (@c)
 @n = row_number() over (order by (select 1))
from
 l5
option
 (maxdop 1);

select top (@c)
 @n = row_number() over (order by (select 1))
from
 master.dbo.spt_values a cross join
 master.dbo.spt_values b cross join
 master.dbo.spt_values c
option
 (maxdop 1);

select top (@c)
 @n = row_number() over (order by (select 1))
from
 master.sys.all_objects a cross join
 master.sys.all_objects b cross join
 master.sys.all_objects c
option
 (maxdop 1);

with s(n) as
(
 select 1
 union all
 select n + 1 from s where n <= 99
)
select top (@c)
 identity(int,1,1) f1
into #t1
from
 s 
 cross apply s s1
 cross apply s s2
option
 (maxdop 1);

set statistics time off;


SQL Server Execution Times:
CPU time = 2434 ms, elapsed time = 2440 ms.

SQL Server Execution Times:
CPU time = 1919 ms, elapsed time = 1919 ms.

SQL Server Execution Times:
CPU time = 1903 ms, elapsed time = 1908 ms.

SQL Server Execution Times:
CPU time = 499 ms, elapsed time = 488 ms.

(1000000 row(s) affected)
28 июн 16, 13:54    [19345196]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
o-o
Guest
.опа.
у меня воспроизводится невоспроизводимый ранее баг,
когда процесс ничего не ждет, а просто висит в runnable.
да, супер-рекурсия висит уже 20 минут со статусом runnable,
в ожиданиях пусто.
поздравимся!
у кого есть идеи, что еще посмотреть?

К сообщению приложен файл. Размер - 134Kb
28 июн 16, 14:04    [19345311]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
o-o
Guest
я прибиваю эту заразу и иду на обед.
30 минут безрезультатного висения в runnable.
всем спасибо, особенно автору рекурсии.
в более спокойной обстановке запущу снова, чтобы копать, как это runnable forever

К сообщению приложен файл. Размер - 24Kb
28 июн 16, 14:12    [19345384]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
a_voronin
давайте прибавим
Прибавили вы тоже лихо - 1,000,000 у вас и 10,000,000 у остальных :)
28 июн 16, 14:14    [19345395]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
o-o
Guest
invm
a_voronin
давайте прибавим
Прибавили вы тоже лихо - 1,000,000 у вас и 10,000,000 у остальных :)

Он же честно признался в соседнем топике, что подозревает вас в статусе sleeping
28 июн 16, 14:20    [19345454]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
o-o
Guest
SQL Server Execution Times:
CPU time = 359 ms, elapsed time = 643 ms.

SQL Server Execution Times:
CPU time = 234 ms, elapsed time = 521 ms.

SQL Server Execution Times:
CPU time = 282 ms, elapsed time = 612 ms.
Query was cancelled by user.

вот это выполнение кода invm,
ну и все оставшееся время, сами понимаете, чье

К сообщению приложен файл. Размер - 19Kb
28 июн 16, 14:28    [19345541]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
Да, чёт обсчитался :D
28 июн 16, 16:58    [19346612]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
o-o
Guest
Да я тоже.
Разве можно такое вообще запускать?
Себя надо по лбу бить в первую очередь
28 июн 16, 17:03    [19346648]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
Если в моем варианте написать @n = row_number() over (order by (select 1)), то получаю 190 мсек на миллионе.
28 июн 16, 17:08    [19346683]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
o-o
Guest
число строк-то как у invm?
давайте, запустите честно,
будем вместе ждать окончание выполнения.
только не у меня, у вас на сервере
28 июн 16, 17:16    [19346746]     Ответить | Цитировать Сообщить модератору
 Re: Что такое master.sys.objects?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
o-o,

Вот полный образец:
set statistics time on;
declare @n int

;with s(n) as
(
 select 1
 union all
 select n + 1 from s where n < 100
)
select top (1000000) @n = row_number() over (order by (select 1))
from
 s 
 cross apply s s1
 cross apply s s2
 cross apply s s3
option
 (maxdop 1);

set statistics time off;


SQL Server Execution Times:
CPU time = 188 ms, elapsed time = 192 ms.
28 июн 16, 18:04    [19347016]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить