标签: sql-server-2014

为什么串联顺序会随着用户定义的表类型而改变?

在使用CONCAT用户定义的表类型时,我遇到了在我看来是一个奇怪的排序问题。

我已经把 SQL 放在下面,让我可以重现这个:

我有以下用户类型:

CREATE TYPE [dbo].[StringList] AS TABLE
(
    [Value] VARCHAR(8000) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

以及以下用于设置所有内容的查询:

DECLARE @ColumnNames AS TABLE([ColumnName] VARCHAR(MAX))
DECLARE @ValueTable AS [dbo].[StringList] --VariableLineA
--DECLARE @ValueTable AS TABLE([Value] VARCHAR(MAX)) --VariableLineB

INSERT INTO @ColumnNames([ColumnName])
VALUES
('Forename'),
('Surname')

INSERT INTO @ValueTable([Value])
VALUES
('Ellis'), ('Ali')
Run Code Online (Sandbox Code Playgroud)

这是我正在运行的查询:

SELECT CONCAT(STRING_AGG(CONCAT([ColumnName], ' - ',  [sc].[Value]), ', '), ', ') -- QueryLineA
        --CONCAT(STRING_AGG([ColumnName] + ' - ' + [sc].[Value], ', '), ', ') --QueryLineB
FROM        @ValueTable AS [sc]
INNER JOIN  @ColumnNames ON …
Run Code Online (Sandbox Code Playgroud)

sql-server concat sql-server-2014

3
推荐指数
1
解决办法
293
查看次数

并行运行 sys.dm_db_index_physical_stats

我试图让它们超过500 GB几张桌子碎片信息中,我使用...DETAILED的选项sys.dm_db_index_physical_stats。我在我们的预生产服务器上的生产数据库的还原副本上执行此操作,因此我不关心损害服务器上的任何性能。

我运行了它,看起来它正在串行运行,并且需要永远。有没有办法dm_db_index_physical_stats()并行运行?或者是否有任何其他设置干扰它?

我想DBCC TRACEON (8649)并且OPTION(USE HINT('ENABLE_PARALLEL_PLAN_PREFERENCE'))在 SQL Server 2014 中不可用。

还试图DBCC SETCPUWEIGHT(1000);从保罗·怀特的博客在这里。该博客提到了并行抑制器,其中之一是系统表。被dm_db_index_physical_stats()认为是系统表吗?

performance index sql-server sql-server-2014

3
推荐指数
1
解决办法
232
查看次数

关于Sql server 2014 express edition

我需要知道在 express 版本的数据库中添加另一个数据文件(比如 MYDB)是否会有另外 10 GB 的大小,或者 10 GB 将是我们添加到数据库中的所有数据文件的总大小。实际上,我使用的是 SQL Server 2014 Express 版本,我们知道数据库大小限制为 10 GB,因此一旦数据库达到我不想要的 10 Gb,我必须将其存档。

我的目的是问这个问题,一旦数据库大小达到10GB,添加另一个数据文件是否可以帮助我避免归档数据库并继续使用同一个数据库?

sql-server sql-server-express sql-server-2014

3
推荐指数
1
解决办法
105
查看次数

用特殊字符替换一组连续的数字

我有一个varchar(200)列,其中包含诸如,

ABC123124_A12312 ABC123_A1212 ABC123124_B12312 AC123124_AD12312 A12312_123 等等..

我想用一个数字替换一个数字序列,*以便我可以对表格中的不同非数字模式进行分组。

这个集合的结果是 ABC*_A* ABC*_B* AC*_AD* A*_*

我在下面编写了以下原始查询,它可以正常工作,但是在一张大表上运行需要很长时间。

我需要帮助重写或编辑它以提高它的性能。SQL Server 2014

-- 1. replace all numeric characters with '*'
-- 2. replace multiple consecutive '*' with just a single '*'
SELECT REPLACE
        (REPLACE
             (REPLACE
                  (REPLACE
                       (REPLACE
                            (REPLACE
                                 (REPLACE
                                      (REPLACE
                                           (REPLACE
                                                (REPLACE
                                                     (REPLACE
                                                          (REPLACE
                                                               (REPLACE(SampleID, '0', '*'),
                                                                '1', '*'),
                                                           '2', '*'),
                                                      '3', '*'),
                                                 '4', '*'),
                                            '5', '*'),
                                       '6', '*'),
                                  '7', '*'),
                             '8', '*'),
                        '9', '*')
                  , '*', '~*') -- replace each …
Run Code Online (Sandbox Code Playgroud)

sql-server pattern-matching sql-server-2014 string-manipulation query-performance

3
推荐指数
1
解决办法
1025
查看次数

查询执行时使用了多少线程?

我在测试 SQL Server 2014 上安装了 AdventureWorks2014 数据库。我计划执行以下查询:

SELECT *
FROM Sales.SalesOrderDetail sod
INNER JOIN Production.Product p ON sod.ProductID = p.ProductID
ORDER BY Style
Run Code Online (Sandbox Code Playgroud)

在实际执行之前,我有我的工作线程的以下图片:

在此处输入图片说明

在查询执行时,我再次检查了工作线程的状态:

在此处输入图片说明

如您所见,第二张图片中的 active_workers_count 总数高于第一张屏幕截图中的总数。从第二个屏幕截图中,我可以假设查询执行所需的总工作线程为 1+2+1+2=6。但是,当我查看执行计划中索引扫描运算符的属性时,我看到:

在此处输入图片说明

似乎我的并行度为 4,这意味着 4 个线程正在并行处理行。

我很困惑,无法确定在查询执行期间运行了多少线程。有人可以向我解释为什么 active_workers_count 与 DOP 不同吗?

sql-server parallelism maxdop sql-server-2014

3
推荐指数
1
解决办法
238
查看次数

什么会导致休眠会话有一个打开的事务?

对于我们的一个 SQL 服务器,有一个过程会造成阻塞混乱:

大多数情况下,该存储过程在一秒内完成,但不知何故使事务保持打开状态。我从 sp_whoisactive 看到的是 status = sleep 并打开 tran 1 持续大约 5-6 分钟。在这段时间内,出现了起伏的阻塞链。

这个 SP 没有像 BEGIN 和 END TRAN 这样的任何事务。它做了一些基本的 select col,col2,col3.... into #temptables from table1 inner join table 2 ... 然后从 #temptable 中选择

当我们从应用程序检查为什么可能有一个事务保持打开状态时,我正在阅读这些场景以在 SP 本身中使用 XACT ABORT ON。但是当不涉及事务时,XACT ABORT 设置如何在这种情况下提供帮助?

请指教

performance sql-server sql-server-2014 query-performance

3
推荐指数
1
解决办法
191
查看次数

在一个 select 语句中进行划分、舍入和替换 - SQL Server 中从字节到 GB 的转换

我有一个数据库,其中包含一个值、一个以字节为单位的共享大小和一个共享名。这非常准确,但对我的最终用户没有用。因此我将值转换为 GB。通过使用简单的划分效果很好。

让我们假设我的数据库由两列组成。共享名和共享大小。

Sharename | Sharesize
Run Code Online (Sandbox Code Playgroud)
Share 1   |71685107549

Now I run this:
SELECT TOP (1000) 
      [Sharename]
      ,[ShareSize]
      ,(ShareSize / 1e+9) SharesizeGB
  FROM [mydb].[dbo].[myshares]
Run Code Online (Sandbox Code Playgroud)

输出是:

ShareSize   SharesizeGB
71685107549 71,685107549
Run Code Online (Sandbox Code Playgroud)

现在我需要用“点”替换“,”并将结果四舍五入到点后只有两位数字。

是否可以仅使用 select 语句?

对于我的示例,不需要除以 1024。

sql-server select sql-server-2014

3
推荐指数
1
解决办法
245
查看次数

SQL Server 2014-我们可以停止 sql 自动重新编译过程吗?

有没有办法检查是什么导致存储过程重新编译(索引重建、统计更新和参数嗅探除外 - 无需运行分析器跟踪或扩展事件),我们是否可以停止/取消/终止自动重新编译过程以减少 CPU 负载?

sql-server sql-server-2014

3
推荐指数
1
解决办法
196
查看次数

死锁链,但没有死锁?

我已经设置了探查器来捕捉这些死锁事件:

  • 死锁图
  • 锁:死锁
  • 锁:死锁链

勾选所有可用列(Te​​xtData、LoginName、SPID 等)

到目前为止,我能够捕捉到一些僵局。

然而,有时我只会得到一个死锁链列表(比如几秒钟内有 30 个事件),但是没有死锁,也没有捕获到死锁图。

这样的案例意味着什么?是否发生了死锁?或者就像“僵局即将来临”但可以解决?

sql-server deadlock sql-server-2014

3
推荐指数
1
解决办法
325
查看次数

是否可以降低作业的 CPU 优先级?

我想在 SQL Agent 中运行一个后台作业,它将清理大量数据并运行多天。

基本上,一张表会删除4亿条记录。删除在循环中运行,因此总是删除大约 100.000 条记录的批次。

在删除过程中,此表中不会修改任何其他内容。

是否可以降低此类作业的 CPU 优先级,以免降低系统速度?

sql-server sql-server-2014

3
推荐指数
1
解决办法
394
查看次数