小编u23*_*534的帖子

如何找到导致tempdb增长的SQL语句?

服务器 (SQL Server 2008) 的 tempdb 每月数次增加到 500GB+。是否可以找出导致此问题的 SQL 语句?问题通常不是由create table #temp...; insert into #temp...select ... into #temp...复杂的连接引起的。

某些 tempdb 文件的初始大小每次也会自动设置为更大的值。如何预防?

有时缓存的计划会阻止调整/缩小文件的大小。如何找到哪一个持有tempdb?

sql-server-2008 sql-server tempdb

29
推荐指数
1
解决办法
7万
查看次数

标识列上的索引应该是非聚集的吗?

对于具有标识列的表,是否应该为标识列创建聚集或非聚集 PK/唯一索引?

原因是将为查询创建其他索引。使用非聚集索引(在堆上)并返回索引未涵盖的列的查询将使用较少的逻辑 I/O (LIO),因为没有额外的聚集索引 b 树查找步骤?

create table T (
  Id int identity(1,1) primary key, -- clustered or non-clustered? (surrogate key, may be used to join another table)
  A .... -- A, B, C have mixed data type of int, date, varchar, float, money, ....
  B ....
  C ....
  ....)

create index ix_A on T (A)
create index ix_..... -- Many indexes can be created for queries

-- Common query is query on A, B, C, ....
select A, …
Run Code Online (Sandbox Code Playgroud)

performance sql-server database-internals index-tuning heap performance-tuning

19
推荐指数
3
解决办法
5821
查看次数

更改列大小需要很长时间?

我有一个包含 45M 行(45 GB 数据空间和 2GB 索引空间)的表。我添加了一个新列,它立即完成。

alter table T add C char(25)
Run Code Online (Sandbox Code Playgroud)

然后我发现尺寸太小,所以我运行以下查询。

alter table T alter column C varchar(2500)
Run Code Online (Sandbox Code Playgroud)

它运行了一个小时,并且仍在运行。sp_whoisactive 显示(目前,仍在运行)

reads: 48,000,000
writes: 5,000,000
physical reads: 3,900,000
Run Code Online (Sandbox Code Playgroud)

不是应该很快吗?

sql-server alter-table sql-server-2014

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

为什么选择最大分区列比索引列慢得多?

我有一个很大的分区表(300+M 行,70 个活动分区)。该表具有 (K0, K1) 的集群 PK,并在列 K1 上进行分区。而 K1 的选择性非常低。

但是,以下查询需要半分钟,扫描计数为 170,逻辑读取为 603K。

select max(K1) from table
Run Code Online (Sandbox Code Playgroud)

然而,在 K1 上索引的非分区表上的类似查询不需要时间,扫描计数为 1,逻辑读取为 5。

是否应该在 K1 上创建无分区索引?

编辑:
为 K1 上没有索引的分区表规划文本。在 K0,K1 上使用聚集 PK,然后在 C1 上创建索引。

  |--流聚合(DEFINE:([Expr1004]=MAX([partialagg1005])))
       |--Parallelism(Gather Streams)
            |--Stream Aggregate(DEFINE:([partialagg1005]=MAX([DB1].[dbo].[table1].[K1])))
                 |--聚簇索引扫描(OBJECT:([DB1].[dbo].[table1].[PK_dbo_tabl1]))

为索引在 K1 上的非分区表规划文本。

  |--流聚合(DEFINE:([Expr1003]=MAX([DB1].[dbo].[table2].[K1])))
       |--顶(顶表达式:((1)))
            |--索引扫描(OBJECT:([Db1].[dbo].[table2].[idx_K1]), ORDERED BACKWARD)

使用 K0、K1 上的聚集 PK 和 C1 上的索引为分区表规划文本。

  |--流聚合(DEFINE:([Expr1004]=MAX([partialagg1005])))
       |--Parallelism(Gather Streams)
            |--Stream Aggregate(DEFINE:([partialagg1005]=MAX([db1].[dbo].[table1].[K1])))
                 |--索引扫描(OBJECT:([db1].[dbo].[table1].[IX_C1]))

sql-server-2008 sql-server

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

分区表上复合聚簇主键的列顺序?

我有下表。

create table T (K1 date, K2 int references S(Id), ....) on partitionScheme(K1)
Run Code Online (Sandbox Code Playgroud)

该表将按 K1 进行分区(K1 具有低选择性。数据将按顺序追加K1)。首选以下哪个主键(列顺序不同)?

alter table T add primary key clustered (K1, K2)
alter table T add primary key clustered (K2, K1)
Run Code Online (Sandbox Code Playgroud)

或者PK应该是非聚集的并创建另一个聚集索引?

很多查询看起来像:

select ....
from T join S on S.Id = T.K2
where ....
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server partitioning

6
推荐指数
2
解决办法
2791
查看次数

捕获非常昂贵的查询

我有一个 2008/2012 年的 Sql 服务器。一些用户运行非常昂贵的查询,例如在一个事务中更新 1G 行或交叉连接几个非常大的表,它会导致服务器时常无响应。

跟踪/触发服务器以在发生时保存正在运行的查询的好方法是什么?

sql-server-2008 sql-server sql-server-2012

6
推荐指数
2
解决办法
2647
查看次数

列存储索引和低选择性列

我有一个几乎有 1T 行的表。

create table bigtable (
  K1 int, K2 date, -- PK columns
  C1 ..., C8 ...., -- columns with various data types like float, date, varchar, ...
  B1 bit, B2 bit, ......, B10 bit -- 10 or so bit columns
  primary key (K1, K2)
)
Run Code Online (Sandbox Code Playgroud)

我想使用列存储来提高查询性能。有以下选项。

  1. 创建集群列存储索引
  2. 为所有列创建一个非聚集列存储索引
  3. 为除这些位列和其他低选择性列之外的所有列创建一个较小的非聚集列存储索引?

用户将自己编写查询。许多查询将是聚合查询。选项 3 的运行速度是否与其他两个尺寸较小的选项一样快?

我正在使用 SQL Server 2014。在我的情况下,我可以定期删除/重新创建非聚集列存储索引,因为数据不经常更新。

sql-server columnstore sql-server-2014

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

在 SSRS 报表设计器 3.0 中保留原始列名称?

我有一个返回一百多列的查询。列名包含重要的下划线、>、< 和大写/小写字符。但是,在创建报告时,SSRS 设计器 (3.0) 会自动添加空格并将这些特殊字符转换为空格。这真的很烦人。是否可以禁用此 SSRS 功能?


使用以下两种方法修复标题需要多少工作?

  1. 使用脚本将列标题更新回原始列名称。

  2. 转换 XML 报告 rdl 文件。

sql-server ssrs sql-server-2008-r2

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

SSMS 2012 中的彩色语法打印

似乎Sql server 2012 的SSMS 不能再打印带有语法颜色的SQL 语句了。这是一个错误吗?它有任何解决方法吗?

ssms sql-server-2012

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

创建列别名时强制使用“as”?

我们发现很多bug都是因为缺少逗号,

select 
    aaaa,
    bbbb  -- forgot comma
    ccc,
    dddddddd,
.....
Run Code Online (Sandbox Code Playgroud)

它是一种使expression name无效的方法并且它必须expression as name在SQL语句中吗?(不是全局的,因为缺少“as”存在的遗留代码)

sql-server-2008 sql-server

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