标签: sql-server

需要了解并行查询执行错误

今天,我们的生产 sql 服务器的性能下降了。在发生这种情况时,我们记录了几个"The query processor could not start the necessary thread resources for parallel query execution"错误。我所做的阅读表明,这与执行复杂查询时要使用的 CPU 数量有关。但是,当我在停电期间检查我们的CPU Utilization was only at 7%. 还有什么其他的东西可以指代我还没有遇到过吗?这是性能下降的可能罪魁祸首还是我在追逐红鲱鱼?

我的 sp_configure 值如下:

name                                minimum maximum config_value run_value
cost threshold for parallelism      0       32767   5            5
Run Code Online (Sandbox Code Playgroud)

sql-server parallelism sql-server-2008-r2

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

什么时候动态端口是“动态的”?

我今天正在Dynamic Ports与我的一位同事讨论,可以使用一些帮助来澄清他们的工作方式。

第一个问题:如果IPALL TCP Dynmaic Ports设置是一个特定的数字(比如 1971),这是否表示您有一个 1971 的静态端口或一个当前为 1971 的动态端口,并且可能会在将来的某个时候发生变化。

在此处输入图片说明

第二个问题:这是我最好奇的一个。我们有一个实例,IPALL TCP Dynmaic Ports通过数十次实例重启,该实例具有相同的端口(设置中的值)数年。是什么导致实例重启后动态端口实际发生变化?

sql-server dynamic-ports tcpip

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

持久计算列上的索引需要键查找以获取计算表达式中的列

我在一个表上有一个持久计算列,它只是由连接列组成,例如

CREATE TABLE dbo.T 
(   
    ID INT IDENTITY(1, 1) NOT NULL CONSTRAINT PK_T_ID PRIMARY KEY,
    A VARCHAR(20) NOT NULL,
    B VARCHAR(20) NOT NULL,
    C VARCHAR(20) NOT NULL,
    D DATE NULL,
    E VARCHAR(20) NULL,
    Comp AS A + '-' + B + '-' + C PERSISTED NOT NULL 
);
Run Code Online (Sandbox Code Playgroud)

Comp不是唯一的,并且 D 是每个组合的有效起始日期A, B, C,因此我使用以下查询来获取每个组合的结束日期A, B, C(基本上是 Comp 相同值的下一个开始日期):

SELECT  t1.ID,
        t1.Comp,
        t1.D,
        D2 = (  SELECT  TOP 1 t2.D
                FROM    dbo.T t2
                WHERE   t2.Comp = …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server execution-plan computed-column bookmark-lookup

24
推荐指数
2
解决办法
3228
查看次数

SQL Server 的 READ COMMITTED SNAPSHOT 与 SNAPSHOT

我正在研究 SQL ServerREAD COMMITTED SNAPSHOTSNAPSHOT隔离级别之间的差异,并发现以下资源:

选择基于行版本控制的隔离级别

对于大多数应用程序,由于以下原因,建议使用行版本控制读取提交隔离而不是快照隔离:

  • 与快照隔离相比,它消耗的 tempdb 空间更少。

  • 快照隔离容易受到更新冲突的影响,这些冲突不适用于使用行版本控制的已提交读隔离。当一个在快照隔离下运行的事务读取数据然后被另一个事务修改时,快照事务对相同数据的更新会导致更新冲突,事务终止并回滚。这不是使用行版本控制的已提交读隔离的问题。

我对这些主题有些陌生,但我似乎无法理解上面链接中的两个要点。

  1. 为什么这些模式的 tempdb 空间会不同?一个存储比另一个更精细的版本控制吗?

  2. 为什么快照隔离更容易受到更新冲突的影响?

sql-server sql-server-2012

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

SQL Server 2012:从命令行生成脚本

我正在运行 SQL Server 2012。

SQL Server Management Studio 可以选择右键单击数据库,然后选择任务和生成脚本。

有没有办法通过命令行以某种方式自动化?

我想创建一个包含整个数据库的架构和数据的脚本。

之类的工具ScriptDB,并sqlpubwiz.exe似乎都针对SQL Server 2005的什么有关SQL Server 2012?

sql-server scripting

24
推荐指数
4
解决办法
4万
查看次数

如何授予对表值函数的权限

我做得对吗……?

我有一个返回钱的函数...

CREATE FUNCTION functionName( @a_principal money, @a_from_date
  datetime, @a_to_date datetime, @a_rate float )  RETURNS money AS BEGIN

  DECLARE @v_dint money   set @v_dint = computation_here
     set @v_dint = round(@v_dint, 2)

  RETURN @v_dint    
END 
GO 
Grant execute on functionName to another_user 
Go
Run Code Online (Sandbox Code Playgroud)

我只是想知道这是否可以转换为 iTVF?

我试过这样做,但出现错误:

CREATE FUNCTION functionName ( @a_principal money, @a_from_date
  datetime, @a_to_date datetime, @a_rate float )  
RETURNS TABLE AS 
RETURN SELECT returnMoney = computation_here  
GO  
Grant execute on functionName to another_user  Go
Run Code Online (Sandbox Code Playgroud)

错误:

消息 4606,级别 16,状态 1,第 2 行授予或撤销特权 …

sql-server functions

24
推荐指数
1
解决办法
8万
查看次数

为什么 0 等于空字符串?

我需要一些帮助来找出以下T-SQL语句返回的原因1(true):

SELECT IIF( 0 = '', 1, 0)
Run Code Online (Sandbox Code Playgroud)

我猜有人改变了一个ANSI选项,比如SET ANSI_NULLS导致这种行为的其他东西。

我的问题是我加入了一些值,在最后一行集中我有由0''值连接的值,这是不正确的。

sql-server t-sql sql-server-2012

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

DDL_admin 与 db_owner 权限

我正在接管一个项目,该项目涉及删除和限制我们服务器场中所有数据库用户的权限。(娱乐时间)

当前受限的权限之一是 db_owner 权限。
正在逐案审查此权限,但常见的更改是将 db_owner 权限替换为以下内容:

我想定义两者之间的确切区别(通知客户)。
但是,据我所知,两者之间的区别应该是:

  • db_accessadmin 权限
  • db_backupoperator 权限
  • db_securityadmin 权限

所以实际上他们会失去:
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT]
[ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE]
[DROP DATABASE]

一旦 db_owner 被上述四个角色取代,用户还有什么会丢失的吗?
这实际上在安全方面起到了很大的作用吗?

sql-server permissions

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

使用 T-SQL 测试字符串是否为回文

我是 T-SQL 的初学者。我想确定输入字符串是否是回文,如果不是,则输出 = 0,如果是,则输出 = 1。我仍在弄清楚语法。我什至没有收到错误消息。我正在寻找不同的解决方案和一些反馈,以更好地理解和了解 T-SQL 的工作原理,从而变得更好——我仍然是一名学生。

在我看来,关键思想是将最左边和最右边的字符相互比较,检查是否相等,然后继续比较左边第二个字符和倒数第二个字符,依此类推。我们做一个循环:如果字符彼此相等,我们继续。如果到达终点,则输出 1,否则,输出 0。

请您批评一下:

CREATE function Palindrome(
    @String  Char
    , @StringLength  Int
    , @n Int
    , @Palindrome BIN
    , @StringLeftLength  Int
)
RETURNS Binary
AS
BEGIN
SET @ n=1
SET @StringLength= Len(String)

  WHILE @StringLength - @n >1

  IF
  Left(String,@n)=Right(String, @StringLength)

 SET @n =n+1
 SET @StringLength =StringLength -1

 RETURN @Binary =1

 ELSE RETURN @Palindrome =0

END
Run Code Online (Sandbox Code Playgroud)

我认为我在正确的轨道上,但我还有很长的路要走。有任何想法吗?

sql-server t-sql sql-server-2012 functions

24
推荐指数
8
解决办法
7790
查看次数

归档除当前年份以外的所有数据并同时对表进行分区的最佳方法是什么

任务

从一组大表中归档除滚动 13 个月之外的所有内容。存档数据必须存储在另一个数据库中。

  • 数据库处于简单恢复模式
  • 这些表从 5000 万行到几十亿行,在某些情况下每个表占用数百 GB。
  • 表当前未分区
  • 每个表在不断增加的日期列上都有一个聚集索引
  • 每个表额外有一个非聚集索引
  • 对表的所有数据更改都是插入
  • 目标是最大限度地减少主数据库的停机时间。
  • 服务器是 2008 R2 Enterprise

“归档”表将有大约 11 亿行,“活”表大约有 4 亿行。显然存档表会随着时间的推移而增加,但我希望活动表也能合理快速地增加。至少在接下来的几年里说 50%。

我曾考虑过 Azure 扩展数据库,但不幸的是我们在 2008 R2 并且可能会在那里停留一段时间。

当前计划

  • 创建一个新的数据库
  • 在新数据库中创建按月(使用修改日期)分区的新表。
  • 将最近 12-13 个月的数据移动到分区表中。
  • 对两个数据库进行重命名交换
  • 从现在的“归档”数据库中删除移动的数据。
  • 对“归档”数据库中的每个表进行分区。
  • 将来使用分区交换来归档数据。
    • 我确实意识到我必须换出要存档的数据,将该表复制到存档数据库,然后将其交换到存档表中。这是可以接受的。

问题: 我正在尝试将数据移动到初始分区表中(实际上我仍在对其进行概念验证)。我正在尝试使用 TF 610(根据数据加载性能指南)和一个INSERT...SELECT语句来移动数据,最初认为它会被最少记录。不幸的是,每次我尝试它都被完全记录。

在这一点上,我认为我最好的选择可能是使用 SSIS 包移动数据。我试图避免这种情况,因为我正在处理 200 个表,并且我可以通过脚本轻松生成和运行任何我可以做的事情。

我的总体计划中是否遗漏了任何内容,SSIS 是快速移动数据和最少使用日志(空间问题)的最佳选择吗?

没有数据的演示代码

-- Existing structure
USE [Audit]
GO

CREATE TABLE [dbo].[AuditTable](
    [Col1] [bigint] NULL,
    [Col2] [int] NULL,
    [Col3] [int] NULL,
    [Col4] [int] NULL,
    [Col5] [int] …
Run Code Online (Sandbox Code Playgroud)

sql-server architecture sql-server-2008-r2 archive

24
推荐指数
1
解决办法
7949
查看次数