Почему размер строки очень большой? - PullRequest
0 голосов
/ 03 января 2019

У меня есть таблица с именем Alerta в базе данных sql (Azure), которая имеет три столбца, два плавающих типа (float) и один столбец типа datetime, проблема в том, что база данных заполняется очень быстро, и я искалРешение и я обнаружил, что это может быть размер таблицы в этом сообщение

Я выполнил следующий код, и я мог видеть, что байт на строку таблицы Alerta составляет 27411 байт

Это код, который я выполнил для определения байтов / строки:

select 
o.name, 
max(s.row_count) AS 'Rows',
sum(s.reserved_page_count) * 8.0 / (1024 * 1024) as 'GB',
(8 * 1024 * sum(s.reserved_page_count)) / (max(s.row_count)) as 'Bytes/Row'
from sys.dm_db_partition_stats s, sys.objects o
where o.object_id = s.object_id
group by o.name
having max(s.row_count) > 0
order by GB desc

Это дизайн таблицы;эта таблица не имеет индекса, даже первичного ключа

design of the table

Я также выполнил запрос этого post , чтобы определить размер дляиндекс и это результаты .

Я в замешательстве, потому что в таблице всего три столбца, и я не нашел решения по уменьшению размера строки таблицы

1 Ответ

0 голосов
/ 03 января 2019

Допустимый максимальный размер строки составляет 8060 байт на SQL-сервере (Azure), но результат, который вы получите после выполнения вашего кода, состоит в том, что число байтов на строку таблицы Alerta составляет 27411 байт. enter image description here

Я думаю, вы можете попробовать следующий скрипт , чтобы получить agian для размера строки:

declare @table nvarchar(128)
declare @idcol nvarchar(128)
declare @sql nvarchar(max)

--initialize those two values
set @table = 'YourTable'
set @idcol = 'some id to recognize the row'

set @sql = 'select ' + @idcol +' , (0'

select @sql = @sql + ' + isnull(datalength(' + name + '), 1)' 
        from  sys.columns 
        where object_id = object_id(@table)
        and   is_computed = 0
set @sql = @sql + ') as rowsize from ' + @table + ' order by rowsize desc'

PRINT @sql

exec (@sql)

Сравните результат с вашим результатом. Например, я создал таблицу и запустил скрипт по SSMS:

select * , (0 + isnull(datalength(price), 1) + isnull(datalength(money), 1) + isnull(datalength(date), 1)) as rowsize from test order by rowsize desc

enter image description here

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...