【发布时间】:2015-12-29 16:48:56
【问题描述】:
我正在尝试执行此语句,但出现此错误:
无法为数据库“tempdb”中的对象“”分配空间,因为“PRIMARY”文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组中添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。
SQL语句:
DECLARE
@curvaTipicaPeriodoMes VARCHAR(50),
@curvaTipicaPeriodoAnio VARCHAR(50),
@curvaTipicaTipo VARCHAR(50),
@curvaTipicaTipoInicial VARCHAR(50),
@fronteraEstado VARCHAR(50),
@fronteraFechaFin DATETIME,
@birrelacion VARCHAR(50),
@birrelacionTipo VARCHAR(50)
SET @curvaTipicaPeriodoMes='10'
SET @curvaTipicaPeriodoAnio= '2014'
SET @curvaTipicaTipo='ValorTipico'
SET @curvaTipicaTipoInicial='ValorTipicoInicial'
SET @fronteraEstado='Operacion'
SET @fronteraFechaFin = NULL
SET @birrelacion='Bir0111'
SET @birrelacionTipo='Tfr0005'
SELECT
Consulta.tipoDia,
CASE WHEN Consulta.ValorTipico > 0 THEN Consulta.ValorTipico ELSE Consulta.ValorTipicoInicial END AS Calculo
FROM
(SELECT
C.tipoDia,
(SELECT (ISNULL(SUM(CC.periodo01),0) + ISNULL(SUM(CC.periodo02),0) + ISNULL(SUM(CC.periodo03),0) + ISNULL(SUM(CC.periodo04),0) + ISNULL(SUM(CC.periodo05),0) + ISNULL(SUM(CC.periodo06),0) + ISNULL(SUM(CC.periodo07),0) + ISNULL(SUM(CC.periodo08),0) + ISNULL(SUM(CC.periodo09),0) + ISNULL(SUM(CC.periodo10),0) + ISNULL(SUM(CC.periodo11),0) + ISNULL(SUM(CC.periodo12),0) + ISNULL(SUM(CC.periodo13),0) + ISNULL(SUM(CC.periodo14),0) + ISNULL(SUM(CC.periodo15),0) + ISNULL(SUM(CC.periodo16),0) + ISNULL(SUM(CC.periodo17),0) + ISNULL(SUM(CC.periodo18),0) + ISNULL(SUM(CC.periodo19),0) + ISNULL(SUM(CC.periodo20),0) + ISNULL(SUM(CC.periodo21),0) + ISNULL(SUM(CC.periodo22),0) + ISNULL(SUM(CC.periodo23),0) + ISNULL(SUM(CC.periodo24),0)
)
FROM
[registrar].[CurvaTipica] CC
WHERE
CC.tipo = @curvaTipicaTipo
AND CC.tipoDia=C.tipoDia
AND
DATEPART(MONTH,CC.periodo) = @curvaTipicaPeriodoMes
AND DATEPART(YEAR,CC.periodo) = @curvaTipicaPeriodoAnio
) * COUNT(C.tipoDia)
AS ValorTipico,
(
SELECT
(
ISNULL(SUM(CC.periodo01),0) + ISNULL(SUM(CC.periodo02),0) + ISNULL(SUM(CC.periodo03),0) + ISNULL(SUM(CC.periodo04),0) +
ISNULL(SUM(CC.periodo05),0) + ISNULL(SUM(CC.periodo06),0) + ISNULL(SUM(CC.periodo07),0) + ISNULL(SUM(CC.periodo08),0) +
ISNULL(SUM(CC.periodo09),0) + ISNULL(SUM(CC.periodo10),0) + ISNULL(SUM(CC.periodo11),0) + ISNULL(SUM(CC.periodo12),0) +
ISNULL(SUM(CC.periodo13),0) + ISNULL(SUM(CC.periodo14),0) + ISNULL(SUM(CC.periodo15),0) + ISNULL(SUM(CC.periodo16),0) +
ISNULL(SUM(CC.periodo17),0) + ISNULL(SUM(CC.periodo18),0) + ISNULL(SUM(CC.periodo19),0) + ISNULL(SUM(CC.periodo20),0) +
ISNULL(SUM(CC.periodo21),0) + ISNULL(SUM(CC.periodo22),0) + ISNULL(SUM(CC.periodo23),0) + ISNULL(SUM(CC.periodo24),0)
)
FROM
[registrar].[CurvaTipica] CC
WHERE
CC.tipo = @curvaTipicaTipoInicial
AND CC.tipoDia=C.tipoDia
AND
DATEPART(MONTH,CC.periodo) = @curvaTipicaPeriodoMes
AND DATEPART(YEAR,CC.periodo) = @curvaTipicaPeriodoAnio
) * COUNT(C.tipoDia)
AS ValorTipicoInicial
FROM [registrar].[CurvaTipica] C
INNER JOIN [dbo].[Frontera] F ON c.frtID=F.objID
INNER JOIN [dbo].[Birrelacion] B ON B.objID1=C.frtID
WHERE
DATEPART(MONTH,C.periodo) = @curvaTipicaPeriodoMes
AND
DATEPART(YEAR,C.periodo) = @curvaTipicaPeriodoAnio
AND
F.estado = @fronteraEstado
AND
F.fechaFin IS NULL
AND
B.objID = @birrelacion
AND
B.objID2 = @birrelacionTipo
GROUP BY
C.tipoDia
) Consulta
ORDER BY
Calculo
我检查了一下,tempdb 的大小为 1400mb,自动增长为 10%。
【问题讨论】:
-
SQL Server 的哪个版本?老实说,这对 DBA 来说可能会更好。虽然我不确定我是否希望看到它以当前状态迁移。这不是一个很好的问题。
-
磁盘满了吗?你对增长有限制吗?
-
数据库文件所在的驱动器上的可用磁盘空间如何?
-
另外,为什么您的查询使用了 1.4 GB 的临时空间?这感觉是个坏主意。
-
我刚刚注意到内部选择,返回1000万行,即使选择计数也需要45秒
标签: sql-server tsql