Sql server 桌子空间太大了
我有一个SQL Server数据库,其中使用的空间对于来自特定应用程序的日志表来说太大 分析磁盘使用情况显示,主键索引的磁盘使用情况是占用空间的原因 主键每行消耗200k,这似乎太多了。 在同一应用程序的不同实例上,同一主键对每行使用20k到40k 如何降低磁盘使用率?这是一个日志表,我们可以重建/截断等。实际上它已经完成了 不必担心保存数据Sql server 桌子空间太大了,sql-server,diskspace,Sql Server,Diskspace,我有一个SQL Server数据库,其中使用的空间对于来自特定应用程序的日志表来说太大 分析磁盘使用情况显示,主键索引的磁盘使用情况是占用空间的原因 主键每行消耗200k,这似乎太多了。 在同一应用程序的不同实例上,同一主键对每行使用20k到40k 如何降低磁盘使用率?这是一个日志表,我们可以重建/截断等。实际上它已经完成了 不必担心保存数据 CREATE TABLE [dbo].[logs]( [id] [int] IDENTITY(1,1) NOT NULL, [user]
CREATE TABLE [dbo].[logs](
[id] [int] IDENTITY(1,1) NOT NULL,
[user] [varchar](50) NULL,
[table] [varchar](50) NULL,
[operation] [varchar](10) NULL,
[query] [varchar](max) NULL,
[date] [datetime] NOT NULL,
[post] [varchar](max) NULL,
[script_name] [varchar](50) NULL,
[query_string] [varchar](1024) NULL,
[user_agent] [varchar](200) NULL,
CONSTRAINT [PK_logs] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
SELECT
OBJECT_NAME(i.OBJECT_ID) AS TableName,
i.name AS IndexName,
i.index_id AS IndexID,
8 * SUM(a.used_pages) AS 'Indexsize(KB)',
ck.total,
8 * SUM(a.used_pages) / ck.total AS 'Indexsize(KB)/row'
FROM sys.indexes AS i
JOIN sys.partitions AS p ON p.OBJECT_ID = i.OBJECT_ID AND p.index_id = i.index_id
JOIN sys.allocation_units AS a ON a.container_id = p.partition_id
JOIN (SELECT COUNT(*) AS total FROM logs) ck ON 1 = 1
WHERE OBJECT_NAME(i.OBJECT_ID) = 'logs'
GROUP BY i.OBJECT_ID,i.index_id,i.name,ck.total
ORDER BY OBJECT_NAME(i.OBJECT_ID),i.index_id
与您的问题无关,但不是使用ON 1=1进行hacking JOIN,而是从日志ck[…]200k中为每行选择COUNT*AS total;20万到底是什么?200千字节?每排?对于标识列上的主键?我很难相信这一点。是什么让你得出这个结论的?@TT。行的20k到40k听起来并不正确。我意识到20-40k也太多了,但我们正在处理pk占用更多磁盘空间的特殊情况。该表每天接收5000个输入。做数学题,你就会看到问题的大小。理想情况下,我们希望保留过去90天的日志。我在上面发布了查询分析磁盘空间。所以你仍然要求每行使用200kb的索引?那么200kb乘以5000,你的索引每天增长1000000KB?这是±1000MB,或者仅仅是指数一天±1Gb?我想不是!与您的问题无关,但不是使用ON 1=1进行hacking JOIN,而是从日志ck[…]200k中为每行选择COUNT*AS total;20万到底是什么?200千字节?每排?对于标识列上的主键?我很难相信这一点。是什么让你得出这个结论的?@TT。行的20k到40k听起来并不正确。我意识到20-40k也太多了,但我们正在处理pk占用更多磁盘空间的特殊情况。该表每天接收5000个输入。做数学题,你就会看到问题的大小。理想情况下,我们希望保留过去90天的日志。我在上面发布了查询分析磁盘空间。所以你仍然要求每行使用200kb的索引?那么200kb乘以5000,你的索引每天增长1000000KB?这是±1000MB,或者仅仅是指数一天±1Gb?我想不是!