powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Загадка массовой загрузки XML
14 сообщений из 14, страница 1 из 1
Загадка массовой загрузки XML
    #39568776
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грузится 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.
name                                         rows	        reserved           data	                index_size	 unused
pricesServiceSetsPriceDates	1187065	75972400 KB	9496520 KB	240 KB	 66475640 KB

Куда и зачем оно хавает такую чортову прорву пустого места?
Data = 9 496 520 KB
!!!
unused = 66 475 640 KB!!!
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568796
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Куда и зачем оно хавает такую чортову прорву пустого места?А параметр updateusage на всякий случай применяли?
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568799
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgaleks222Куда и зачем оно хавает такую чортову прорву пустого места?А параметр updateusage на всякий случай применяли?
Применял.
Дык ведь, и свободное место в tempdb уменьшается соответственно.
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568802
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222alexeyvgпропущено...
А параметр updateusage на всякий случай применяли?
Применял.
Дык ведь, и свободное место в tempdb уменьшается соответственно.А, то есть sqlXmlBulkLoad на время импорта распирает таблицу, а потом отпускает неиспользованное? И появляется огромный unused? Занятно, не слышал о таком.
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568808
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgaleks222пропущено...

Применял.
Дык ведь, и свободное место в tempdb уменьшается соответственно.А, то есть sqlXmlBulkLoad на время импорта распирает таблицу, а потом отпускает неиспользованное? И появляется огромный unused? Занятно, не слышал о таком.

Если б он "отпускал". Оно так и остается после загрузки.

Если построить на этой таблице кластерный индекс - размеры приходят в норму и свободное место в tempdb появляется обратно.

Есть еще пара-тройка таблиц с таким же эффектом.

Что самое забавное, есть две таблички - практически полных аналога. Только на одной есть кластерный индекс... и ее не "разносит".
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568810
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Если б он "отпускал". Оно так и остается после загрузки.Я, я имел в виду "отпускает в unused"
aleks222Data = 9 496 520 KBЗаметьте - размер данных точно соответствует количеству строк * размер страницы.
А размер данных неточно, но примерно близок к количеству строк * размер экстента
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568811
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgА размер данных неточно, но примерно близок к количеству строк * размер экстентаТо есть размер unused
А вот размер reserved точно равен количеству строк * размер экстента
:-)
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568812
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgalexeyvgА размер данных неточно, но примерно близок к количеству строк * размер экстентаТо есть размер unused
А вот размер reserved точно равен количеству строк * размер экстента
:-)Видимо, умный сервер, видя колонку ntext, решает зарезервировать по экстенту на строку, "а там разберёмся"
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568816
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgalexeyvgпропущено...
То есть размер unused
А вот размер reserved точно равен количеству строк * размер экстента
:-)Видимо, умный сервер, видя колонку ntext, решает зарезервировать по экстенту на строку, "а там разберёмся"

Не, удаление колонки ntext ничего не меняет. Я попробовал.
Радикально меняет дело только кластерный индекс.
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568818
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,

сдаётся мне что дело в TEXTIMAGE_ON но доказать не могу:)
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568821
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568822
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKaleks222,

сдаётся мне что дело в TEXTIMAGE_ON но доказать не могу:)Но он же удалил ntext
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568846
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
...
Рейтинг: 0 / 0
Загадка массовой загрузки XML
    #39568986
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

Вопщем понятно - делаем кластерный индекс.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Загадка массовой загрузки XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]