我正在尝试跨多个数据库运行如下查询
select ParamValue from Table1 where paramname = 'SYSTEM_LICENSE'
Run Code Online (Sandbox Code Playgroud)
每个 DB 的名称类似于下面的名称,并且应排除某些 DB。
“客户_123”
我查看了使用 sp_MSforeachdb,但它不受支持并且运行不佳。我试图弄清楚如何编写游标,但没有成功。在这一点上,只是寻求可以真正写出我想要做的事情的人的帮助。
有没有人有任何SQL代码来自动生成单词(全字母,没有数字)。
是否有任何内联 SQL 可以在列上执行此操作?
我们试图混淆表中的名字/姓氏和其他单词列。
此答案目前不适用于列,因为它在列内生成相同的结果。
select top (@stringlength) char(abs(checksum(newid())) % 26 + ascii('A'))
from sys.all_objects
for xml path('')
Run Code Online (Sandbox Code Playgroud)
我试过了,但功能很慢,内联查询可以更快,请随时改进或重写下面
CREATE VIEW [dbo].[RandomValueVw]
AS
SELECT RAND() as random_value
CREATE function dbo.RandomWordGenerate(@length int)
returns varchar(50)
as begin
DECLARE
@text nvarchar(255),
@i int
SET @i = 0
SET @text = ''
WHILE (@i < @length)
BEGIN
SET @text = @text + CHAR((select * from [dbo].[RandomValueVw]) * 26 + 65)
SET @i = @i + 1
END
return @text
end
Run Code Online (Sandbox Code Playgroud) 最近,我正在解决一个奇怪的性能问题,该问题影响了应用程序的生产环境,但不影响任何较低的环境。我设法用这个查询以最简单的形式复制了这个问题:
SELECT product_id, dbo.TranslateStatusToActive(status_id) FROM prod_Products
Run Code Online (Sandbox Code Playgroud)
TranslateStatusToActive是一个非常简单的标量 UDF,它基本上只是连接给另一个表的值,并根据case语句返回 1 或 0 。我会发布代码,但它是供应商编写的功能,我今天对被起诉并不特别感兴趣。(是的,逻辑可以内联。是的,它解决了性能问题。是的,我们已经说服供应商实施更改。这不是我的问题。)
在生产中执行时,查询需要 10 到 20 秒才能返回结果。在开发中,相同的查询在不到 3 秒的时间内返回。执行计划几乎相同,除了显示 CPU 时间在生产中约为 15000 毫秒,其他地方为 3000 毫秒。
我怀疑存在一些环境差异,因此我设置了另一台服务器来尽可能地复制生产条件:我确保 CPU 的数量、分配给 SQL Server 的内存量以及特定的补丁级别 (13.0.0.1)。 4451) 相同。
我将生产数据库的副本恢复到这个新的沙箱服务器,令我惊讶的是,查询的执行速度与它在开发中的执行速度一样快。再一次,计划和数据是相同的,除了额外的 CPU 时间。执行计划中列出的等待类型相同,并且在每个环境中彼此相差几毫秒。
不知道接下来要做什么,我optimize for ad hoc workloads在生产服务器上启用了。这解决了性能问题!但是有一件事:其他环境都没有启用此设置。我一直在测试期间定期清除每个环境中的程序和系统缓存,所以我认为这不是更改设置导致重新编译的结果。
optimize for ad hoc workloads启用生产环境才能与未启用它的其他环境一样好?开发是共享的,而生产目前仅由该应用程序使用。第三个盒子的用法和生产的盒子几乎一样。我几乎清除了他们发出DBCC命令的每个缓存。开发环境经常用作培训系统,所以我相当确信这不是计划缓存问题。
与第三个框的唯一区别是没有连接到它的应用程序,但是在我在生产中测试该功能时几乎没有使用应用程序,所以区别在于,基于我在这种环境中工作的经验,微不足道。我唯一不能做的就是重启生产服务器,但微软的文档明确指出启用optimize for ad hoc workloads不会清除或影响任何现有计划,所以我看不出有什么区别。
performance sql-server functions sql-server-2016 query-performance
我很懒惰,宁愿参数化一次(以获得名称的 object_id)并Invoke-SqlCmd用于其余工作。
给定一系列用于处理任意服务器对象的函数,下面的测试是否足以确认 CmdletBinding 输入参数Int32防止通过用户提供的方式注入$object_id?
function foo {
[CmdletBinding()]Param(
[Int32]$object_id
)
$query = "select type_desc from sys.objects where object_id = $object_id;"
Invoke-Sqlcmd -ServerInstance "localhost" -Database "tempdb" -Query $query
}
foo 3
foo "0 union all select name from sys.syslogins where sid = 0x01"
foo $null
foo ([math]::Pow(2,31)+1)
foo @(1,2)
Run Code Online (Sandbox Code Playgroud) 以下是我所做的:
在第 4 步之前,我注意到日志文件在增长,这让我很困惑。为什么会这样?
根据 MSDN:
对于每个逻辑写入,事务日志记录都会插入记录修改的日志缓存中。
进而:
提交事务时将日志记录写入磁盘。
那么如何解释插入数据时日志文件不断增长的事实,即使没有提交事务?
据我了解,未提交的日志记录应该存储在日志缓冲区中,而不是存储在磁盘上。
所有在线资源都说使用 Windows 帐户作为 Agent 帐户,即 Snapshot、Distributor 和 Log Reader 来设置复制。
请参阅以下链接作为示例:
我的问题是:上面使用域帐户有什么问题,哪个更容易维护和管理?
replication sql-server sql-server-agent transactional-replication
我有一个包含超过 200 亿行的 SQL Server 表,最后一个分区中有 130 亿行。
该表目前按“时间”字段分为 6 种方式:
2011
2012
2013
2014
2015
2016/2017/2018
Run Code Online (Sandbox Code Playgroud)
2016/2017/2018分区需要拆分成自己的分区所以有2016、2017、2018分区。
如何做到这一点并在此过程中避免大量日志文件增长?数据库处于简单恢复中,当前每个分区都位于其自己的一组磁盘上的单独文件组中。
CREATE TABLE [dbo].[Log](
[RefNo] [nchar](7) NOT NULL,
[DevID] [nvarchar](7) NOT NULL,
[Time] [datetime] NOT NULL,
[summary] [float] NULL,
[staging] [float] NULL,
[position] [float] NULL,
CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED
(
[RefNo] ASC,
[DevID] ASC,
[Time] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 96)
)
Run Code Online (Sandbox Code Playgroud)
我在可用性组的辅助节点上应用了 Service Pack 4。它失败了,所以我将辅助节点的整个 VM 恢复到早期版本,现在数据不同步。
我有主动和被动两个节点。我尝试手动恢复数据移动。但它失败了。你能在这里提出什么建议吗?
我们偶尔会收到以下电子邮件警报。
\n\n描述:用于打开连接的登录数据包在结构上无效;连接已关闭。请联系客户端库的供应商。
\n\n描述:网络数据包有效负载中指定的长度与读取的字节数不匹配;连接已关闭。请联系客户端库的供应商。
\n\n我尝试在网上搜索。但我还没有得到任何关于我应该如何解决这些警报问题的好的指示。在这种情况下,我应该联系应用程序团队来检查错误代码,还是联系安全团队来检查任何恶意活动?感谢您的指导。
\nSQL Server 中是否有一种方法/任何函数/DMV 可以提供谁执行了特定数据库的存储过程?
sql-server ×10
alerts ×1
cursors ×1
data-masking ×1
functions ×1
partitioning ×1
patching ×1
performance ×1
powershell ×1
replication ×1
t-sql ×1