|
|
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
Грузится xml через sqlXmlBulkLoad в табличку базы tempdb [src] CREATE TABLE [dbo].[pricesServiceSetsPriceDates]( [gross] [real] NULL, [ids] [nvarchar](4000) NOT NULL, [version] [nvarchar](8) NULL, [OverflowColumn] [ntext] NULL, [spoKey] [int] NULL DEFAULT ((-1)), [hash] [int] NULL, [key] [int] NOT NULL, [from] [date] NULL, [to] [date] NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] [src] индексов нет. В столбце [OverflowColumn] везде NULL. Столбец [ids] заполнен строками длиной < 900 символов, реально в среднем около 100 символов. Но sp_spaceused выдает чудовищную картину. Код: plaintext 1. Куда и зачем оно хавает такую чортову прорву пустого места? Data = 9 496 520 KB !!! unused = 66 475 640 KB!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 08:55:17 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
aleks222Куда и зачем оно хавает такую чортову прорву пустого места?А параметр updateusage на всякий случай применяли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 09:34:50 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
alexeyvgaleks222Куда и зачем оно хавает такую чортову прорву пустого места?А параметр updateusage на всякий случай применяли? Применял. Дык ведь, и свободное место в tempdb уменьшается соответственно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 09:38:21 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
aleks222alexeyvgпропущено... А параметр updateusage на всякий случай применяли? Применял. Дык ведь, и свободное место в tempdb уменьшается соответственно.А, то есть sqlXmlBulkLoad на время импорта распирает таблицу, а потом отпускает неиспользованное? И появляется огромный unused? Занятно, не слышал о таком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 09:42:07 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
alexeyvgaleks222пропущено... Применял. Дык ведь, и свободное место в tempdb уменьшается соответственно.А, то есть sqlXmlBulkLoad на время импорта распирает таблицу, а потом отпускает неиспользованное? И появляется огромный unused? Занятно, не слышал о таком. Если б он "отпускал". Оно так и остается после загрузки. Если построить на этой таблице кластерный индекс - размеры приходят в норму и свободное место в tempdb появляется обратно. Есть еще пара-тройка таблиц с таким же эффектом. Что самое забавное, есть две таблички - практически полных аналога. Только на одной есть кластерный индекс... и ее не "разносит". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 09:48:04 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
aleks222Если б он "отпускал". Оно так и остается после загрузки.Я, я имел в виду "отпускает в unused" aleks222Data = 9 496 520 KBЗаметьте - размер данных точно соответствует количеству строк * размер страницы. А размер данных неточно, но примерно близок к количеству строк * размер экстента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 10:01:30 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
alexeyvgА размер данных неточно, но примерно близок к количеству строк * размер экстентаТо есть размер unused А вот размер reserved точно равен количеству строк * размер экстента :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 10:03:13 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
alexeyvgalexeyvgА размер данных неточно, но примерно близок к количеству строк * размер экстентаТо есть размер unused А вот размер reserved точно равен количеству строк * размер экстента :-)Видимо, умный сервер, видя колонку ntext, решает зарезервировать по экстенту на строку, "а там разберёмся" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 10:04:32 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
alexeyvgalexeyvgпропущено... То есть размер unused А вот размер reserved точно равен количеству строк * размер экстента :-)Видимо, умный сервер, видя колонку ntext, решает зарезервировать по экстенту на строку, "а там разберёмся" Не, удаление колонки ntext ничего не меняет. Я попробовал. Радикально меняет дело только кластерный индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 10:11:04 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
aleks222, сдаётся мне что дело в TEXTIMAGE_ON но доказать не могу:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 10:13:49 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
aleks222alexeyvgпропущено... Видимо, умный сервер, видя колонку ntext, решает зарезервировать по экстенту на строку, "а там разберёмся" Не, удаление колонки ntext ничего не меняет. Я попробовал. Радикально меняет дело только кластерный индекс.Хм, всё равно резервирует экстент на строку? Прикольно. Вот небольшое обсуждение было https://social.technet.microsoft.com/Forums/en-US/727f0ff2-4598-497b-b3f8-05805e0cf4e2/sqlxmlbulkload-size-of-database-40-times-bigger-than-xml-file?forum=sqlxml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 10:17:21 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
TaPaKaleks222, сдаётся мне что дело в TEXTIMAGE_ON но доказать не могу:)Но он же удалил ntext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 10:17:59 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
Похоже на авторIf the allocation cache and the free space cache are empty between later insert operations, SQL Server will allocate new pages from new extents so that the insert operations can succeed. When the table metadata is removed from memory, the allocation cache and the free space cache are also removed. Therefore, the next time that you perform an insert operation that references the table, these caches are empty. In this situation, SQL Server must perform step 5, and then step 5.5. This behavior causes recently allocated extents to show that eight pages are allocated when only one page is used. In a worst-case scenario, 56 kilobytes (KB) of space may be wasted for every insert operation that you perform on the table. авторThe following are two cases where the problem occurs, and the allocation cache and the free space cache are empty. It is assumed that the table's schema allows for 100 rows to fit in a data page. If the table has only a heap storage structure, SQL Server could allocate a new extent for every insert operation and use only one page in that extent. https://support.microsoft.com/en-gb/help/924947/sql-server-significantly-increases-the-unused-space-for-some-tables ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 10:45:10 |
|
||
|
Загадка массовой загрузки XML
|
|||
|---|---|---|---|
|
#18+
TaPaKПохоже на авторIf the allocation cache and the free space cache are empty between later insert operations, SQL Server will allocate new pages from new extents so that the insert operations can succeed. When the table metadata is removed from memory, the allocation cache and the free space cache are also removed. Therefore, the next time that you perform an insert operation that references the table, these caches are empty. In this situation, SQL Server must perform step 5, and then step 5.5. This behavior causes recently allocated extents to show that eight pages are allocated when only one page is used. In a worst-case scenario, 56 kilobytes (KB) of space may be wasted for every insert operation that you perform on the table. авторThe following are two cases where the problem occurs, and the allocation cache and the free space cache are empty. It is assumed that the table's schema allows for 100 rows to fit in a data page. If the table has only a heap storage structure, SQL Server could allocate a new extent for every insert operation and use only one page in that extent. https://support.microsoft.com/en-gb/help/924947/sql-server-significantly-increases-the-unused-space-for-some-tables Вопщем понятно - делаем кластерный индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2017, 13:56:58 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39568810&tid=1690686]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
197ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 479ms |

| 0 / 0 |
