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

Откуда: Moscow
Сообщений: 887
invm,

лично с Вас, $20 за ответ. Реквизиты пришлю в ответ на письмо.

Ответ обещаю с примером, причем повторяемым.

Сообщение было отредактировано: 14 янв 21, 15:56
14 янв 21, 16:01    [22263362]     Ответить | Цитировать Сообщить модератору
 Re: Связать две таблицы join'ом при связи 1:М.  [new]
invm
Member

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

Ну докажите сначала, что Вы в состоянии дать адекватный пример. А то деньги возьмете и с приветом...
Хотя бы принцип его работы объясните.
14 янв 21, 16:58    [22263397]     Ответить | Цитировать Сообщить модератору
 Re: Связать две таблицы join'ом при связи 1:М.  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
invm,

Попробуйте сами ответить на вопросы:
Читается ли какой-то индекс таблицы в запросе SELECT * FROM table MAXDOP(1)?
Читается ли какой-то индекс таблицы в запросе SELECT * FROM table MAXDOP(0)?
14 янв 21, 17:27    [22263416]     Ответить | Цитировать Сообщить модератору
 Re: Связать две таблицы join'ом при связи 1:М.  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
ptr128
Читается ли какой-то индекс таблицы в запросе SELECT * FROM table MAXDOP(1)?
Читается ли какой-то индекс таблицы в запросе SELECT * FROM table MAXDOP(0)?
Расшифруйте глубинный смысл данных вопросов.

Даже если Ваша таблица в обсуждаемом примере кластерная, физических чтений не будет больше, чем общее число страниц кластерного индекса. Потому что сервер не дурак и не будет поднимать с диска страницу, если она уже есть в BP.
14 янв 21, 22:33    [22263576]     Ответить | Цитировать Сообщить модератору
 Re: Связать две таблицы join'ом при связи 1:М.  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
invm,

Я же Вам выше стоимость моих ответов озвучил. Жду в e-mail
14 янв 21, 23:14    [22263596]     Ответить | Цитировать Сообщить модератору
 Re: Связать две таблицы join'ом при связи 1:М.  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
ptr128
Я же Вам выше стоимость моих ответов озвучил. Жду в e-mail
Ну Вы, пока что, не продемонстрировали в данной теме, что Ваши ответы имеют хоть какую-то ценность.
Так что имею все основания считать, что потрачу деньги впустую.

Свои утверждения принято либо доказывать, либо ссылаться на авторитетные источники. Вы не сделали ни того, ни другого.
Своим опусом 22261187 Вы ничего не доказали, а фразой
ptr128
Во-вторых, видим, что параллельный план запроса в данном случае потребовал 2246 дополнительных обращений к кешу данных. То есть, при недостатке памяти дважды с диска могло читаться 0.6% страниц. Таким процентом я готов пренебречь. А было бы 6% - это уже стало бы поводом для размышлений в случае многопользовательской системы.
только продемонстрировали отсутствие некоторых знаний.
К тому же, это вообще не ответ на обсуждаемый вопрос.

В завершение, у меня для Вас, совершенно бесплатно, два подарка:
1. Для восполнения отсутствующих знаний - https://www.red-gate.com/simple-talk/sql/learn-sql-server/understanding-and-using-parallelism-in-sql-server/ и https://www.sqlservergeeks.com/lru-k-algorithm-quick-look/
2. Скрипт, демонстрирующий физические чтения, который можете использовать для собственных экспериментов
+
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create database TestData;
alter database TestData set recovery simple;
go

use TestData;
go

create table dbo.t_clustered (id int identity not null primary key, v int null, filler char(100) null);
create table dbo.t_heap (id int identity not null, v int null, filler char(100) null);

insert into dbo.t_clustered
 (v)
output
 inserted.v into dbo.t_heap (v)
 select top (1000000)
  1
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

select
 sum(page_count) as t_clustered__total_pages,
 sum(case when index_level > 0 then page_count else 0 end) as t_clustered__nonleaf_pages
from
 sys.dm_db_index_physical_stats(db_id(), object_id('dbo.t_clustered'), null, null, 'detailed');

select
 sum(page_count) as t_heap__total_pages
from
 sys.dm_db_index_physical_stats(db_id(), object_id('dbo.t_heap'), null, null, 'detailed');
go

-- запретим prefetch и read ahead
dbcc traceon(652, -1);
dbcc traceon(8744, -1);
go

use master;
go

-- очистим BP от данных из TestData
alter database TestData set offline with rollback immediate;
alter database TestData set online;
go

print '--- Seril plan ------------------------------------';
declare @c bigint;
set statistics xml, io on;
select @c = count(v) from TestData.dbo.t_clustered option(maxdop 1);
select @c = count(v) from TestData.dbo.t_heap option(maxdop 1);
set statistics xml, io off;
go

-- очистим BP от данных из TestData
alter database TestData set offline with rollback immediate;
alter database TestData set online;
go

print '--- Parallel plan ------------------------------------';
declare @c bigint;
set statistics xml, io on;
select @c = count(v) from TestData.dbo.t_clustered option (use hint('enable_parallel_plan_preference'));
select @c = count(v) from TestData.dbo.t_heap option (use hint('enable_parallel_plan_preference'));
set statistics xml, io off;
go

use master;
alter database TestData set single_user with rollback immediate;
drop database TestData;
go

dbcc traceoff(652, -1);
dbcc traceoff(8744, -1);
go


--- Seril plan ------------------------------------
Table 't_clustered'. Scan count 1, logical reads 14495, physical reads 14495, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.

Table 't_heap'. Scan count 1, logical reads 14493, physical reads 14493, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.

--- Parallel plan ------------------------------------
Table 't_clustered'. Scan count 5, logical reads 14652, physical reads 14547, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.

Table 't_heap'. Scan count 5, logical reads 14493, physical reads 14493, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
15 янв 21, 11:17    [22263758]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / Microsoft SQL Server Ответить