我的一位开发人员编写了一个类似于 VB.Net 函数 (LastIndexOf) 的 SQL 函数,并希望发布它。我的问题是将它放在中央数据库中而不是将它放在每个用户数据库中的原因是什么?
开发人员试图将它放在他的主数据库上的 sys 模式中,这样他就不必限定从用户数据库对它的调用......叹气
但我不确定将它(显然不是主数据库)与每个用户数据库集中起来的有效借口是什么?
使用 SQL Server 2008 R2:
如何写入 SQL Server 错误日志?我有一个 ROLLBACK 语句,我想将它与写入错误日志的语句结合起来用于外部监控。
例子:
BEGIN TRAN
INSERT INTO table1
SELECT *
FROM table2
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
--Write to log
RETURN
END
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)
编辑:
我想澄清一下 - 我想写入对象资源管理器中“管理”文件夹下的“SQL Server 日志”、“当前”日志。
所以我们可以使用 Windows 登录或混合模式,但是我们可以将 SQL Server 配置为仅使用内部登录并阻止所有 Windows 登录吗?
作为预防性(或反应性)过程添加所有潜在的 Windows 登录并将其设置为受限权限的唯一解决方案是什么?
我们使用文件流中的Microsoft SQL Server 2008(SP2) - 10.0.4000.0(X64)和Windows Server 2008存储数百万文件。由于有数百万个文件,所有这些文件都被分为 100 个文件组,并一个接一个地按顺序插入。现在我们在每个文件组中有大约 15K 个文件,并且预计很快会增长到 20K。所以我们想知道文件组是否有最大行数限制才能提供最佳性能,或者当我们在单个文件夹中存储或准备存储大约 <20K 个文件时,操作系统端是否有任何最大行数限制以实现最佳性能?
对正确资源的任何建议也将非常有帮助。
我有一个指向 msdn 博客的链接,其中指出
4.检查 FILESTREAM 目录容器的文件数是否不超过 300,000 个,因为 NTFS 性能下降可能是一个问题,尤其是在启用生成 8.3 文件名时。
谢谢。
执行探查器跟踪时,查询持续时间究竟测量什么?
我有一个执行数据访问 (SELECT) 的存储过程,平均需要大约 30 秒才能将结果返回给应用程序。但是当我对其运行跟踪时,平均持续时间约为 8 秒,最大持续时间为 12 秒,平均 CPU 为 5.5 秒。
是什么导致返回结果集需要更长的时间?我没有积累大量的 NETWORKIO 等待。结果集只有大约 270 行简单的文本数据,总共大约 50 列。
有人知道我如何列出 SQL Server 实例中的准备好的语句吗?
是否可以抑制所有sqlcmd消息输出到cmd窗口?
我正在运行一个大型脚本,并且所有Processed XXXX total records消息似乎都减慢了很多。
该脚本超过 4Gb,因此有大量数据。
我有一个具有以下结构的 SQL 数据表:
CREATE TABLE Data(
Id uniqueidentifier NOT NULL,
Date datetime NOT NULL,
Value decimal(20, 10) NULL,
RV timestamp NOT NULL,
CONSTRAINT PK_Data PRIMARY KEY CLUSTERED (Id, Date)
)
Run Code Online (Sandbox Code Playgroud)
不同 Id 的数量范围从 3000 到 50000。
表的大小变化高达超过 10 亿行。
一个 ID 可以覆盖表格的几行至 5%。
该表上执行次数最多的查询是:
SELECT Id, Date, Value, RV
FROM Data
WHERE Id = @Id
AND Date Between @StartDate AND @StopDate
Run Code Online (Sandbox Code Playgroud)
我现在必须在 Id 的子集上实现数据的增量检索,包括更新。
然后我使用了一个请求方案,其中调用者提供特定的 rowversion,检索数据块并使用返回数据的最大 rowversion 值进行后续调用。
我写了这个程序:
CREATE TYPE guid_list_tbltype AS TABLE (Id uniqueidentifier not null primary key) …Run Code Online (Sandbox Code Playgroud) 据我所知,调整最大服务器内存和最大并行度不需要重新启动实例。新设置会不会不重启就一直生效?
我只是想确保我在这些概念的正确轨道上,所以任何反馈都将不胜感激。
这是我刚刚优化的查询的理论,通过反复试验和阅读 MSDN 文档的过程。
查询
DECLARE @pic_id int
SET pic_id = 1
SELECT ROW_NUMBER() OVER (ORDER BY pic_date desc) AS row_num, *
FROM tbl_pics
WHERE deleted = 0 AND map_id = 1 AND (hidden = 0 OR pic_id = @pic_id)
Run Code Online (Sandbox Code Playgroud)
指数
CREATE NONCLUSTERED INDEX [IX_tbl_pics] ON [dbo].[tbl_pics]
(
[map_id] ASC,
[deleted] ASC,
[pic_date] DESC
)
INCLUDE ( [hidden], [pic_id] )
Run Code Online (Sandbox Code Playgroud)
pic_id上还有一个PK索引
理论
键列是这样,因为它们用于 WHERE 子句(但不用于 OR 情况)或 ORDER BY。
非键 (INCLUDE) 列也是如此,因为它们在 WHERE 中使用,但因为它们用于 OR 场景,它们不能(不能 = 不会提高性能)成为键列。
这些假设正确吗?如果没有,我错过了什么?
谢谢!
sql-server ×10
index ×2
performance ×2
ddl ×1
filestream ×1
functions ×1
index-tuning ×1
logs ×1
security ×1
sqlcmd ×1
t-sql ×1