小编noj*_*lag的帖子

查询性能取决于参数 21 秒 vs. > 14 小时

我有以下查询:

SELECT DISTINCT DATEADD(ms,DATEDIFF(ms,0,[Time]),DATEADD(dd,0,DATEDIFF(dd,0,[DATE]))),
                [DATE],
                DATEPART(YY,[DATE]),
                DATEPART(MM,[DATE]),
                DATENAME(MONTH,[DATE]),
                DATEPART(DD,[DATE]),
                [Time],
                DATEPART(HH,[Time]),
                DATEPART(MI,[Time]),
                DATEPART(SS,[Time])
FROM [SourceTable]
WHERE ([DATE] BETWEEN '2012-01-08' AND '2012-01-08') AND
       DATEADD(ms,DATEDIFF(ms,0,[Time]),DATEADD(dd,0,DATEDIFF(dd,0,[DATE]))) NOT IN
       (SELECT [DateTime]
        FROM [DIM].[DateTime] 
        WHERE [Date] BETWEEN '2012-01-08' AND '2012-01-08')
ORDER BY [DATE], [Time]
OPTION (MAXDOP 6)
Run Code Online (Sandbox Code Playgroud)

当我使用这个特定日期时,我不得不在 14 小时运行时间后取消查询,任何其他日期相同的查询通常需要 21 秒。我确实检查了查询执行计划,与我使用它的日期无关,查询影响的行数每天几乎相同(大约 500'000 行)。我检查了索引,统计数据是最新的。如何解释这种行为以及如何解决这个问题?

机器硬件足够(8核,192 GB RAM)

sql-server sql-server-2008-r2

6
推荐指数
1
解决办法
291
查看次数

在 SQL Server 中使用 AD 组与角色

什么是 sql server 安全的最佳实践?使用被授予架构对象权限的 AD 组,还是应该将 AD 组添加到被授予架构对象权限的数据库角色?如果后者是最佳实践,那么使用数据库角色的真正好处是什么?

security permissions sql-server-2012

6
推荐指数
1
解决办法
7623
查看次数

扩展分区表

我有一个包含四年数据的表,每个月我都有一个基于包含两个文件的文件组的分区。没想到又收到了八年的数据,准备了这些年的数据库文件和文件组。

当前的方案涵盖 200901 - 201512,我现在需要添加 200001 - 200812。使分区表联机的最佳方法是什么?

  • 创建新的分区方案和分区函数,并将聚集索引更改为这个新的分区方案;或者
  • 我可以以某种方式改变现有的分区方案和分区功能吗?

我问是因为当前表有 180 亿行,我想以有效的方式做到这一点:)

sql-server partitioning sql-server-2012

5
推荐指数
1
解决办法
1260
查看次数

Integration Services 目录 - 版本说明

在集成服务目录中,我可以看到可用的包/项目版本,并在必要时恢复到旧版本。在此对话框中,我看到一个字段“描述”,但是我发现还没有办法将描述放入该字段中。如何编辑/填充?

sql-server ssis sql-server-2012

5
推荐指数
1
解决办法
1222
查看次数

表值函数中的条件 WHERE 子句

我有一个表值函数

    CREATE FUNCTION [dbo].[DateRange] 
    (
        @StartDate date,
        @EndDate date,
        @Location varchar(25),
        @Device varchar(25)
    ) 
    RETURNS TABLE 
    AS
    RETURN 
    (
        SELECT *
        FROM MyTable
        WHERE Date < @EndDate AND
              Date > @StartDate AND
              Location = @Location AND
              Device = @Device 

    );
Run Code Online (Sandbox Code Playgroud)

现在我想让用户选择使用 NULL 作为位置参数和/或设备参数,以便他/她获取与位置和设备无关的所有数据

什么是最优雅和最有效的方式来做到这一点?

t-sql sql-server-2012

5
推荐指数
1
解决办法
5171
查看次数

页面压缩不起作用?

我创建了一个表,其中有大约 100 个分区(每月),所有分区都配置为使用页面压缩。之后,我将逐月向该表中插入数据。

我现在希望 SQL Server 应用页面压缩。但是使用sp_estimate_data_compression_savings它看起来不像。(我会节省大约 40%-50%。)

我在配置页面压缩时错过了什么吗?

问题是我现在有大文件,每个分区 70-80 GB。当我压缩它们时,它们是半空的。重新获得这个磁盘空间是不可能的,因为如果我试图缩小分区后面的数据文件,我最终会得到一个碎片化的聚集索引。

我怎样才能避免这种磁盘空间浪费派对?

sql-server compression sql-server-2012

5
推荐指数
1
解决办法
640
查看次数

sys.dm_db_index_physical_stats 非常慢

我有一个大约 4.5TB 的数据库,因为我们在一个表(按月分区)上并行插入(以减少每日加载时间),该表上的聚集索引往往会出现严重碎片。当我在这张表上从 sys.dm_db_index_physical_stats (Limited) 中进行选择时,它需要很长时间(> 4-5 小时)。有没有更快更好的方法来检查这个表的分区上的碎片级别,这花费的当前时间是完全不可接受的。

sql-server dmv sql-server-2012

5
推荐指数
1
解决办法
5627
查看次数

SQL Server 数据验证的最佳实践

我有我想导入 SQL Server 2014 的 CSV 文件。文件中的每条记录大约有 20 列,每条记录都应验证数据类型合规性以及每列的其他一些检查(最小/最大范围,空/not null 等)。

我正在寻找有关以有效方式执行此操作的模型架构的建议。使用 SSIS 和一些错误表在我看来有点低效,因为它看起来好像我一次只能检查一列和错误处理(尤其是 SSIS 中的列锁定充其量是笨拙的)。

我希望处理每条记录并立即了解该记录中的所有错误,以便我可以立即向提供导入数据的人员提供所有问题的反馈。

sql-server ssis sql-server-2014 data-validation ssis-2014

5
推荐指数
1
解决办法
2万
查看次数

如何在视图中使用 MAXDOP?

我有几个视图用于将数据从 SQL-Server 导出到 .csv 文件中。它们都是通过 SSIS 包执行的。我们的 DBA 决定将“最大并行度”设置为 1,并告诉我在我认为有意义的地方使用 MAXDOP。

我现在已经多次看到 MAXDOP 确实有助于提取大数据量(尤其是当它导致对所有分区进行表扫描时)。

问题

  • 如何在视图中使用 MAXDOP?
  • 有没有办法绕过这个限制?

sql-server sql-server-2008-r2

4
推荐指数
1
解决办法
4957
查看次数