我正在编写一个表值函数,调用该函数所需的时间是直接运行代码的 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 这样的 …
考虑一个.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在非交互模式下运行我的文件,只显示结果并退出脚本?
上下文:MS SQL Server 2012
在使用 Kendra Little 的强大工具 sp_BlitzIndex 时,许多表被诊断为“索引囤积者:沉迷于空值”。
我不是在寻找关于 NULL 及其位置的辩论。我知道在某些情况下 NULL 非常合适,甚至是必要的。这里的问题是 sp_BlitzIndex 提供的反馈,以及强制执行 not NULL 约束的值。
在 sp_BlitzIndex 被“诊断”为具有许多允许 NULL 的列的大多数表中,没有任何实际的 NULL 值。我们以编程方式不允许它们。我只是从未取消选中“允许空值”框以在数据库级别强制执行该约束。
强制执行此约束有什么好处,为什么它是她的脚本确定的问题之一?
谢谢!
我目前正在学习 TSQL 并且正在学习这是可能的,我应该使用“标准”SQL 方言。我在哪里可以找到哪些命令是“标准”的,哪些是 TSQL?
这里有很多关于 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 语句并将结果通过电子邮件发送给 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 作业:
发送结果:
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)在我们的其中一台生产服务器中,我们需要启用xp_cmdshell某些应用程序功能。
使用我们当前的安全措施,它在所有情况下都被禁用,只需要为一个特定的 SQL Server 启用。
xp_cmdshell?我们的应用程序团队创建了一个触发器,可以启动另一个发票流程,他们需要这样做xp_cmdshell。
昨晚我们停电了,当服务器恢复时,我们的域用户无法访问我们的 SQL Server 2000 实例名称:MASSQL。
我们可以使用 SQL 身份验证进行访问。
我还针对有问题的 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 ×9
connections ×1
functions ×1
index-tuning ×1
null ×1
performance ×1
psql ×1
restore ×1
sql-standard ×1
t-sql ×1