小编Han*_*non的帖子

为什么在表值函数内调用标量函数比在 TVF 外调用要慢?

我正在编写一个表值函数,调用该函数所需的时间是直接运行代码的 10 倍。我将此追溯到对 TVF 内的多行标量函数的调用。从 TVF 内部调用时,对标量函数的调用过慢。标量函数接受 3 个 int 参数并返回单个 int 结果。

什么会导致它在 TVF 中变慢?

首先,TVF 基本上是一种数据透视表,只返回一行,有 13 列。

标量函数是一个多行标量,它在两个表中的一个中查找一组匹配的键(即输入是 columnA,输出是 columnB,其中 input = columnA 和 active)。使用稍微更改的 where 子句再次搜索表 1,然后是表 2,最后是表 1。

用法最初是一个带有连接子句的 cte 查询:

  With cte as ( select count(*) over (partition by c.c1) recs,
                       c.setId, c.c1, c.c2, n.name
                From tbl c
                     Inner join tbl n on n.id = schma.scal(c.c1, c.c2, c.c3)
                Where c.setId=@setId and c.endDt is null
   )
Run Code Online (Sandbox Code Playgroud)

这个 cte 最初被调用了 11 次,从(大约一半的时间)返回到 3 行(使用像 c1=42 这样的 …

performance sql-server sql-server-2008-r2 functions

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

psql:以批处理模式运行命令

考虑一个.sql包含一些选择和更新的文件。我想使用该psql实用程序从脚本运行此文件:

psql -h whatever.rds.amazonaws.com -U user dbname -f commands.sql
Run Code Online (Sandbox Code Playgroud)

问题是我得到了一个带有查询结果的交互式屏幕和一个(0 rows)(END),需要按下esc才能返回正常外壳。

我曾尝试使用--echo-all和/或--single-transaction遵循psql 手册,但没有成功。

如何sql在非交互模式下运行我的文件,只显示结果并退出脚本?

psql postgresql-9.3

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

使用 sp_BlitzIndex - 诊断为“索引囤积者:沉迷于空值”

上下文:MS SQL Server 2012

在使用 Kendra Little 的强大工具 sp_BlitzIndex 时,许多表被诊断为“索引囤积者:沉迷于空值”。

我不是在寻找关于 NULL 及其位置的辩论。我知道在某些情况下 NULL 非常合适,甚至是必要的。这里的问题是 sp_BlitzIndex 提供的反馈,以及强制执行 not NULL 约束的值。

在 sp_BlitzIndex 被“诊断”为具有许多允许 NULL 的列的大多数表中,没有任何实际的 NULL 值。我们以编程方式不允许它们。我只是从未取消选中“允许空值”框以在数据库级别强制执行该约束。

强制执行此约束有什么好处,为什么它是她的脚本确定的问题之一?

谢谢!

null sql-server index-tuning sql-server-2012 sp-blitzindex

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

SQL“标准”指南?

我目前正在学习 TSQL 并且正在学习这是可能的,我应该使用“标准”SQL 方言。我在哪里可以找到哪些命令是“标准”的,哪些是 TSQL?

sql-server t-sql sql-standard

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

sys.sp_reset_connection。为什么有很多?

这里有很多关于 DBA EXCHANGE 的问题。但他们都帮不了我。

我有两个问题:

1)使用sp_whoisactive,我发现了很多sys.sp_reset_connection;1(我知道它们是sp_reset_connections因为我使用了dbcc inputbuffer(SPID):

大量重置

这是“主服务器”,因此其他服务器( 3,4,7 )在这里不断请求某些数据库的信息(我看到的是,每个请求都是针对 MASTER 数据库的)。

数据库


2)他们为什么要花这么多时间?

看这里的一些答案,发现系统在等待CPU。但所有 CPU 都是空的。这怎么会是问题?

在幕后,SQL Server 使用 sp_reset_connection 逻辑来“重置”SQL Server 的连接状态,这比建立全新的连接更快。较旧的驱动程序将过程调用作为单独的 TDS 往返发送到 SQL Server。
较新的客户端驱动程序在下一个命令中添加了一个标志位,从而避免了额外的网络往返。

很好……但我还是不知道该怎么办。

这不会给我带来问题。我只想知道如何解决这个问题。

sql-server sql-server-2008-r2 connections

4
推荐指数
2
解决办法
4593
查看次数

在存储过程中生成数据库创建脚本

我希望自动擦除我们的测试环境,使其在每个冲刺结束时与生产保持一致。

就目前而言,这目前正在通过测试环境获取完整备份并使用移动和替换进行恢复来完成,但这占用了我们拥有的大部分空间。

目的是从头开始创建环境并仅填充所需的表。

我可以使用“右键单击 > 任务 > 生成脚本...”来创建数据库框架。

有没有办法从存储过程中创建该脚本,以便可以用于重新创建数据库

此外,我正在按原样处理这一点,但显然该脚本只会以其当前大小创建数据库,因此一旦生成脚本,就需要修改所有文件大小

为任何帮助干杯

sql-server stored-procedures restore sql-server-2012

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

确定针对表的查询的原始 IP 地址?

我有一个正在由在未知位置运行的服务更新的表。

我已经检查了所有通常与我的数据库服务器通信的服务器,但它们似乎都没有运行相关服务。

我正在尝试追踪此服务的运行位置,我想知道是否可以查看影响特定表的查询来自何处?

这可能吗?

sql-server sql-server-2012

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

执行Sql语句并将结果发送到电子邮件

我必须每天执行 SQL 语句并将结果通过电子邮件发送给 dba。我配置了数据库电子邮件。

下面是查询:

 SELECT
        account.accountID,
        account.name
    FROM
        account
        LEFT OUTER JOIN accountfeaturesetting afs 
            ON afs.accountid = account.accountid 
                and afs.featureid = 'Schedules' 
                and afs.settingid = 'EditReasons'
    WHERE
        ISNULL(afs.Value, '0') = '1'
        AND NOT EXISTS
 (SELECT 1 FROM program 
WHERE program.AccountID = account.AccountID
 AND program.Active = 1 AND 
(program.ScheduleEditReasonFlags <> 0 OR
 program.ScheduleEditReasonFields <> 0))
        AND account.IsMaster = 0
Run Code Online (Sandbox Code Playgroud)

为此,我创建了具有 2 个步骤的 Sql 作业:

  1. 执行选择语句
  2. 发送结果:

    Use MSDB
        EXEC msdb.dbo.sp_send_dbmail
            @profile_name = 'abc',
            @recipients = 'recipients@company.com',
            @subject = 'queryresultset',
            @body='testmail', …
    Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-agent database-mail

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

xp_cmdshell 的安全风险

在我们的其中一台生产服务器中,我们需要启用xp_cmdshell某些应用程序功能。

使用我们当前的安全措施,它在所有情况下都被禁用,只需要为一个特定的 SQL Server 启用。

  1. 启用有多糟糕xp_cmdshell
  2. 担心真的是一件大事吗?
  3. 可以采取什么具体措施来启用它并仍然限制其使用?

我们的应用程序团队创建了一个触发器,可以启动另一个发票流程,他们需要这样做xp_cmdshell

sql-server

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

目标主体名称不正确。无法生成 SSPI 上下文(SQL 或 AD 问题)?

昨晚我们停电了,当服务器恢复时,我们的域用户无法访问我们的 SQL Server 2000 实例名称:MASSQL。

我们可以使用 SQL 身份验证进行访问。

  1. 我们尝试确保运行该服务的用户具有 SSPI 读写权限
  2. 我们尝试创建一个新用户
  3. 我们尝试使用 NETWORK SERVICE 帐户运行该服务
  4. 我们尝试以本地系统帐户运行
  5. 我们尝试创建一个新的域管理员帐户并作为新的域管理员帐户运行服务

我还针对有问题的 SQL Server 实例运行了以下命令:

setspn -L xsql2
Run Code Online (Sandbox Code Playgroud)

结果

已注册 CN=MASSQL、CN=Computers、DC=ABC、DC=com 的 ServicePrincipalNames:
        主机/MASSQL
        主机/MASSQL.ABC.COM

我对一个没有问题的 SQL 实例运行了以下命令:

setspn -L xensql1
Run Code Online (Sandbox Code Playgroud)

结果

注册 CN=XENSQL1、CN=Computers、DC=ABC、DC=com 的 ServicePrincipalNames:
        WSMAN/XENSQL1
        WSMAN/XENSQL1.ABC.com
        受限KrbHost/XENSQL1
        主机/XENSQL1
        受限KrbHost/XENSQL1.ABC.COM
        主机/XENSQL1.ABC.COM

看来无问题实例的结果有更多数据。我不知道这是否与一个是2000年,另一个是2012年有关。

可能发生了什么?如何允许域用户再次登录?

sql-server active-directory

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