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

Откуда:
Сообщений: 98
Добрый день.

Например есть таблица 1000 строк и 1000000000000000 строк.


Теоретически вставка одной строки в эти таблицы будет с одинаковой скоростью идти?
3 авг 17, 15:56    [20698418]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Колян Козлов
Теоретически вставка одной строки в эти таблицы будет с одинаковой скоростью идти?
Зависит от индексов
Для простого случая с одинаковой (например, кластерный ПК на идентити колонку, и больше ничего)
3 авг 17, 16:02    [20698445]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
Колян Козлов
Member

Откуда:
Сообщений: 98
alexeyvg
Колян Козлов
Теоретически вставка одной строки в эти таблицы будет с одинаковой скоростью идти?
Зависит от индексов
Для простого случая с одинаковой (например, кластерный ПК на идентити колонку, и больше ничего)


спасибо.


я просто думал что индекс должен значение на уникальность проверить и из-за этого вставка медленнее на большой таблице.
3 авг 17, 16:07    [20698468]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
aleks222
Guest
alexeyvg
Колян Козлов
Теоретически вставка одной строки в эти таблицы будет с одинаковой скоростью идти?
Зависит от индексов
Для простого случая с одинаковой (например, кластерный ПК на идентити колонку, и больше ничего)


1. Вот с хрена ли "зависит от индексов"? Индекс суть табличка.
2. От размера зависит. Если вставка идет в разброс (в разные места таблицы) - для большой таблицы (она в память не лезет целиком) это означает чтение страниц с диска.
3. Если вставка в хвост или гриву - без разницы.
3 авг 17, 16:08    [20698469]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
aleks222
1. Вот с хрена ли "зависит от индексов"? Индекс суть табличка.
Вообще да, неважно.

Колян Козлов
я просто думал что индекс должен значение на уникальность проверить и из-за этого вставка медленнее на большой таблице.
Проверка на уникальность - это поиск в индексе, а поиск зависит от размера логарифмически, то есть очень слабо.
3 авг 17, 16:24    [20698533]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
o-o
Guest
aleks222
Если вставка идет в разброс (в разные места таблицы) - для большой таблицы (она в память не лезет целиком) это означает чтение страниц с диска.

так если я вставляю 100 разных значений в 100 разных страниц,
зачем всю таблицу поднимать, если нужны лишь 100 страниц?
а если поднимать 100 страниц, то какая разница, на диске остались еще 100 или еще 100000000 страниц?
3 авг 17, 16:39    [20698576]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
aleks222
Guest
o-o
aleks222
Если вставка идет в разброс (в разные места таблицы) - для большой таблицы (она в память не лезет целиком) это означает чтение страниц с диска.

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


Для тебя - никакой.
Ибо фантазия далее 100 не простирается.

Для тупых: поднять 100 страниц - это в 100 (сто) раз дольше, чем поднять 1.
Для тупых и еще тупее: а в маленькой таблице может быть 1 (одна) страница.

Анализируй ЭТО.
3 авг 17, 16:57    [20698644]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
o-o
Guest
еще раз.
вставляем в 100(сто) разных страниц.
не в 1 (одну)
[у тебя дальше таблицы из одной страницы фантазия не работает???]
какая же разница, поднять 100 из 100 или 100 из 100000000?
наверное, 100 из 100000000 не влезут в память, правда?
зато 100 из 100 гарантированно влезут
3 авг 17, 17:13    [20698696]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
o-o
еще раз.
вставляем в 100(сто) разных страниц.
не в 1 (одну)
[у тебя дальше таблицы из одной страницы фантазия не работает???]
какая же разница, поднять 100 из 100 или 100 из 100000000?
наверное, 100 из 100000000 не влезут в память, правда?
зато 100 из 100 гарантированно влезут
100 из 100 гарантированно будут в памяти после первого же чтения и апдэйта
А 100 (случайных) из 100000000 гарантированно не будут в памяти, т.к. эти 100 всегда разные
Идея такая.

А вообще ТС сравнивает конкретно 1000 строк и 1000000000000000 строк :-)

aleks222
Для тебя - никакой.
Ибо фантазия далее 100 не простирается.

Для тупых: поднять 100 страниц - это в 100 (сто) раз дольше, чем поднять 1.
Для тупых и еще тупее: а в маленькой таблице может быть 1 (одна) страница.
Вы зачем тут пишите? Помочь хотите? Или приходится хамить для самоуважения, без этого оно пропадает?
3 авг 17, 17:23    [20698721]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
o-o
Guest
alexeyvg
100 из 100 гарантированно будут в памяти после первого же чтения и апдэйта
А 100 (случайных) из 100000000 гарантированно не будут в памяти, т.к. эти 100 всегда разные
Идея такая.

т.е. уже речь о последующих апдэйтах?
а кажется, вопрос был о вставке(!) да еще и одной(!) строки
3 авг 17, 17:27    [20698730]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
o-o
alexeyvg
100 из 100 гарантированно будут в памяти после первого же чтения и апдэйта
А 100 (случайных) из 100000000 гарантированно не будут в памяти, т.к. эти 100 всегда разные
Идея такая.

т.е. уже речь о последующих апдэйтах?
а кажется, вопрос был о вставке(!) да еще и одной(!) строки
Не, речь по прежнему о вставке, но мы же сейчас обсуждаем случай вставок в случайные страницы, а не в "конец" (20698469, пункт 2). Или, как вариант, о апдэйте индекса при вставке новых данных, что тоже приведёт к такому же результату.
3 авг 17, 17:43    [20698766]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5490
alexeyvg
Колян Козлов
Теоретически вставка одной строки в эти таблицы будет с одинаковой скоростью идти?
Зависит от индексов
Для простого случая с одинаковой (например, кластерный ПК на идентити колонку, и больше ничего)
Как раз простой случай - полное отсутствие индексов. Особенно кластерного. Называется "куча". Данные всегда валятся в конец таблицы.

При наличии кластерного индекса появляются расходы на его перебалансировку.
3 авг 17, 17:57    [20698810]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
o-o
Guest
Dmitry V. Liseev
Как раз простой случай - полное отсутствие индексов. Особенно кластерного. Называется "куча". Данные всегда валятся в конец таблицы.

полная ахинея.
вставка в кучу идет в первое попавшееся пустое место,
а ни в какой ни в конец.
3 авг 17, 18:28    [20698888]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Dmitry V. Liseev
Как раз простой случай - полное отсутствие индексов. Особенно кластерного. Называется "куча". Данные всегда валятся в конец таблицы.

При наличии кластерного индекса появляются расходы на его перебалансировку.
Ок, но, по моему, кластерный индекс по идентити тоже можно рассматривать как случай, когда скорость вставки одной записи не будет зависеть от размера. Хоть это и медленнее чем в кучу.
3 авг 17, 18:51    [20698938]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
o-o
Guest
репро для кучи:
определяю поля dbo.t так, что 1 строка = 1 страница;
вставляю 3 строки: 1,2,3
смотрю раскладку по страницам: 4 страницы: 1 IAM + 3 IN-ROW DATA

удаляю среднюю строку, проверяю состав кучи:
он все тот же.
еще бы, страница пуста, но куча ее не отдает
(page N2 is still allocated to heap)

вставляю 4-ую строку, проверяю расклад по страницам:
все то же самое, строка заняла место удаленной только что

кого и это не убедилo, делают селект из таблицы:
для нее единственнуй возможный порядок скана это .
и что видим?
видим 1,4,3
убеждаемся, что 4 заняло место 2

create table dbo.t (id int, col char(8000));
insert into dbo.t values(1, '1'), (2, '2'), (3, '3');
dbcc ind('db1', 'dbo.t', 0);
--PagePID	IAMFID	IAMPID
--109	NULL	NULL
--94	1	109
--110	1	109
--114	1	109

delete dbo.t
where id = 2;
dbcc ind('db1', 'dbo.t', 0);
--PagePID	IAMFID	IAMPID
--109	NULL	NULL
--94	1	109
--110	1	109
--114	1	109

insert into dbo.t values(4, '4');
dbcc ind('db1', 'dbo.t', 0);
--PagePID	IAMFID	IAMPID
--109	NULL	NULL
--94	1	109
--110	1	109
--114	1	109

select *
from dbo.t;
---
--1 1
--4 4
--3 3
3 авг 17, 18:52    [20698940]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
Колян Козлов
Member

Откуда:
Сообщений: 98
Ребята, интересует INSERT одной строки, но очень часто и много, т.е. миллионы insert-ов по одной строке.
3 авг 17, 18:52    [20698942]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
Колян Козлов
Member

Откуда:
Сообщений: 98
ну и там не куча, есть кластерный индекс.
3 авг 17, 18:53    [20698943]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5490
o-o
Dmitry V. Liseev
Как раз простой случай - полное отсутствие индексов. Особенно кластерного. Называется "куча". Данные всегда валятся в конец таблицы.

полная ахинея.
вставка в кучу идет в первое попавшееся пустое место,
а ни в какой ни в конец.
То есть, просматривает все страницы, нет ли там свободного места?
3 авг 17, 18:54    [20698948]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
o-o
Guest
*единственнуй возможный порядок скана это = единственный возможный порядок скана это allocation order
3 авг 17, 19:02    [20698959]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
o-o
Guest
[quot Dmitry V. Liseev]
o-o
То есть, просматривает все страницы, нет ли там свободного места?

В отличие от вас сервер в курсе, что такое PFS-страницы.
И юзает при инсерте именно их, чтобы определить, куда же можно вставить в кучу
3 авг 17, 19:10    [20698980]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
aleks222
Guest
o-o
alexeyvg
100 из 100 гарантированно будут в памяти после первого же чтения и апдэйта
А 100 (случайных) из 100000000 гарантированно не будут в памяти, т.к. эти 100 всегда разные
Идея такая.

т.е. уже речь о последующих апдэйтах?
а кажется, вопрос был о вставке(!) да еще и одной(!) строки


Колян Козлов
Ребята, интересует INSERT одной строки, но очень часто и много, т.е. миллионы insert-ов по одной строке.


Моя телепатия лучше.

20698469
4 авг 17, 05:23    [20699424]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5490
alexeyvg
Dmitry V. Liseev
Как раз простой случай - полное отсутствие индексов. Особенно кластерного. Называется "куча". Данные всегда валятся в конец таблицы.

При наличии кластерного индекса появляются расходы на его перебалансировку.
Ок, но, по моему, кластерный индекс по идентити тоже можно рассматривать как случай, когда скорость вставки одной записи не будет зависеть от размера. Хоть это и медленнее чем в кучу.
Индекс - это сбалансированное дерево. Если постоянно вставлять увеличивающиеся значения, то одна ветка дерева будет постоянно расти. В итоге серверу придётся периодически перебалансировать дерево, хотя сами записи пишутся на страницы последовательно. Если сделать кластерный индекс, к примеру, по GUID, то будет ещё и постоянное расщепление страниц происходить. Кластерный подразумевает физическое хранение в отсортированном порядке. Соответственно, если запись не выходит впихнуть на нужную страницу между соответствующими записями, то приходится распределять на две новые страны.
4 авг 17, 15:52    [20701329]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5490
o-o
репро для кучи:
определяю поля dbo.t так, что 1 строка = 1 страница;
вставляю 3 строки: 1,2,3
смотрю раскладку по страницам: 4 страницы: 1 IAM + 3 IN-ROW DATA

удаляю среднюю строку, проверяю состав кучи:
он все тот же.
еще бы, страница пуста, но куча ее не отдает
(page N2 is still allocated to heap)

вставляю 4-ую строку, проверяю расклад по страницам:
все то же самое, строка заняла место удаленной только что

кого и это не убедилo, делают селект из таблицы:
для нее единственнуй возможный порядок скана это .
и что видим?
видим 1,4,3
убеждаемся, что 4 заняло место 2

create table dbo.t (id int, col char(8000));
insert into dbo.t values(1, '1'), (2, '2'), (3, '3');
dbcc ind('db1', 'dbo.t', 0);
--PagePID	IAMFID	IAMPID
--109	NULL	NULL
--94	1	109
--110	1	109
--114	1	109

delete dbo.t
where id = 2;
dbcc ind('db1', 'dbo.t', 0);
--PagePID	IAMFID	IAMPID
--109	NULL	NULL
--94	1	109
--110	1	109
--114	1	109

insert into dbo.t values(4, '4');
dbcc ind('db1', 'dbo.t', 0);
--PagePID	IAMFID	IAMPID
--109	NULL	NULL
--94	1	109
--110	1	109
--114	1	109

select *
from dbo.t;
---
--1 1
--4 4
--3 3
o-o
В отличие от вас сервер в курсе, что такое PFS-страницы.
И юзает при инсерте именно их, чтобы определить, куда же можно вставить в кучу
Спасибо, я пока на таком уровне не очень хорошо разбираюсь. Мало документации. Да и по работе редко нужно. Только при очень тонкой оптимизации производительности.
4 авг 17, 15:57    [20701351]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
o-o
Guest
Dmitry V. Liseev,

да пожалуйста.
я всегда с удовольствием вывалю то, что знаю.
просто заявления типа "а что, сервер поднимет все страницы, чтобы поискать пустое место?"
конечно достают.
поэтому и отвечаю в том же духе.
------
на самом деле этот поиск в PFS-страницах очень даже недешевый.
на каждое вставляемое значение поиск выполняется заново,
а интерпретация битмапа(PFS-страницы) совсем небесплатная.
да она еще и не битмап, она байт-мап.
т.е. покрывает всего 8088 страниц кучи.
соответственно, чем больше куча и чем меньше местa в ее начале, тем дороже становится поиск,
ибо уже не 1 PFS-страницу надо интерпретировать, а несколько.
эти риды PFS-страниц видны в профайлере,
но не отражаются в STATISTICS IO.
если вы попробуете сделать вставку(не 1 строку, а нормальный INSET..SELECT)
в только что отребилденную кучу, это одно время,
а во фрагментированную -- совсем другое, гораздо дольше вставлять будет.
это неявно доказывает, что MS знает о недешевости поиска в PFS-страницах
и у них явно сделана оптимизация: если в какой-то момент вставки не удалось найти место в куче
и пришлось аллокейтить новую страницу, все последующие значения того же инсерта будут идти на новые страницы
4 авг 17, 16:31    [20701511]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли размер таблицы на скорость вставки в нее данных?  [new]
o-o
Guest
Dmitry V. Liseev
Индекс - это сбалансированное дерево. Если постоянно вставлять увеличивающиеся значения, то одна ветка дерева будет постоянно расти. В итоге серверу придётся периодически перебалансировать дерево, хотя сами записи пишутся на страницы последовательно.

B-tree оно конечно сбалансированное дерево, ага.
но вы хоть раз его картинку видели?
какая это у него ветка начнет отрастать при вставке identity?
какие-то ужасы нашего городка...
4 авг 17, 16:36    [20701529]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить