小编mar*_*c_s的帖子

将表传入存储过程

是否可以将表名传入存储过程?

例如,假设您有同一个表的多个视图。它们都具有完全相同的结构。

您需要一个可以为任何视图运行的存储过程。

就像是:

create procedure myprocedure
@tableName varchar(50) = ''
select blah from @tableName where blah = blah2 
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做时,我得到

Must declare the table variable @tablename
Run Code Online (Sandbox Code Playgroud)

任何想法我怎么能做到这一点?

sql-server-2008 sql-server stored-procedures

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

为服务器端跟踪设置过滤

我正在尝试在 SQL Server 2008 R2 中设置服务器端跟踪。虽然我可以轻松选择事件和数据列,但过滤似乎有点奇怪......

我试图对 SQL 批处理或存储过程的持续时间设置过滤(过滤任何 >= 1000 毫秒),但我也想过滤所涉及的数据库名称

当我将跟踪定义从 SQL Profiler 导出到*.sql文件时,我似乎没有找到对数据库名称的任何过滤:

-- lots of other stuff up here - setting up trace events and so on...

-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 100479e4-6eeb-4608-af17-64141f1631ec'
set @bigintfilter = 1000000
exec sp_trace_setfilter @TraceID, 13, 0, 4, @bigintfilter

....
Run Code Online (Sandbox Code Playgroud)

那是怎么回事?为什么我可以指定要过滤的数据库名称 - 但跟踪定义最终不包含它?

  • 这是否意味着服务器端跟踪始终只检查它在其中创建的数据库?
  • 但是为什么我可以按数据库名称指定过滤器?
  • 这是否也意味着无法对例如死锁进行跨数据库服务器范围的跟踪?

更新:经过一番折腾,我得出以下结论:

  • Create Trace在我的情况下,数据库名称的过滤器未应用于脚本,因为我最终只选择了Locks …

sql-server-2008-r2

6
推荐指数
1
解决办法
4660
查看次数

SQL Server 2012 资源调控器增强

在 SQL Server 2012 中,对通过使用资源调控器控制内存使用进行了哪些具体的增强。直到 SQL Server 2008 R2 资源调控器只能控制与查询内存授予相关的内存

我查看了SQL Server 2012 BOL,但它没有明确说明任何内容。

sql-server-2008 sql-server sql-server-2012

6
推荐指数
1
解决办法
1584
查看次数

尝试使用 SQL Server 等待和队列调整 Sharepoint 站点

我对使用 Waits 和 Queues 进行性能调整还很陌生 - 很吸引人,但也不总是那么直观......

现在,我的一个客户有一个 SQL Server 2008 64 位企业版,目前分配给它 16 GB 的 RAM,在具有 64 GB RAM 的物理服务器上运行(在同一台上还有其他和更改的 SQL Server 实例)机)。

他正在运行的这个应用程序是一个 Sharepoint 2010 解决方案,在大多数情况下,它的性能 - 很好 - 对于 Sharepoint 站点来说还可以。除了搜索,这是非常缓慢的。

现在从 SQL Server 的角度来看,我已经观察了几天的等待统计数据,前三种等待类型是:

1) CXPACKET 约为 49%
2) SOS_SCHEDULER_YIELD 约为 10.5%
3) OLEDB 约为 9.5%

这似乎非常一致——随着时间的推移没有大的变化。

  • PAGEIOLATCH_SH 排在第七位 - 占总等待时间的 2.5%,平均资源等待时间为 14 毫秒。
  • ASYNC_IO_COMPLETION 有八个——不到总等待时间的 2%,但平均资源等待时间高达 38 秒(是的,秒——不是毫秒!)

信号等待时间极短,所以这似乎并不表示 CPU 压力。那么是什么导致了这种模式——我们可以做些什么来 (a) 找到更多相关信息,或 (b) 找到加快速度的解决方案?

有什么想法吗?见解?想法?我对任何事情都持开放态度——我们不能改变的是基本架构(单独的 SQL Server 实例,在物理服务器之间移动——以及基于 Unix 的 SAN,它不能保证数据和登录到单独的物理磁盘上的分离)

再说一遍:这是一个SharePoint网站 …

sql-server-2008 sharepoint wait-types

6
推荐指数
1
解决办法
968
查看次数

缓慢的 SQL Server 数据库(约 2TB) - 由于索引碎片而导致 CPU 高?

我已经在 ServerFault 上发布了这个,但没有多少运气得到回应。

我有一个相当大的 SQL Server 数据库(~2TB)。大多数数据都在一个表中(约 60 亿行)。

两周前,我在大表上删除了两个非聚集索引,并将数据迁移到单个 6TB RAID SSD 阵列上。然后我重新创建了两个需要很长时间的索引(假设因为我目前有数据(用于表和索引)并登录到同一个阵列上,似乎使用 RAID 我不能有快速的顺序和随机 r/w同时)。

无论如何,在重新创建索引后,它运行了大约一个星期。在这一周中,我一直在大桌子上慢慢清理,它只是删除了旧的不需要的行。到目前为止,我已经从 60 亿中删除了大约 3 亿,而且我猜测我还有很多事情要做。

现在像这样运行了大约一个星期后,它现在运行得很慢,我不确定哪个最好。

现在的情况:

  • 双至强
  • 192GB 内存
  • 带有 SQL Server 2012 的 Windows Server 2012
  • CPU 达到 100%(16 核)——在减速之前只使用了大约 50%
  • IO 似乎不太努力(无队列)

大表目前有(我之前没有任何碎片信息):

  • 1x 聚集索引:48% 碎片化
  • 1x 非聚集索引:36% 碎片化
  • 1x 非聚集索引:10% 碎片
  • 我以前在这个表上还有两个索引,但不久前删除了它们

你认为什么最能解决我的问题

  • 在同一个数组上重建非聚集索引(假设这应该可以解决问题,但会像以前那样需要很长时间。在不久的将来可能会遇到同样的问题,因为我仍在清理表)
  • 在新的 RAID 阵列上重建非聚集索引(应该如上所述修复但可能更快)
  • 将非聚集索引移动到新的 RAID 阵列(最快选项)
  • 在新的 RAID 阵列上重新创建两个旧索引(不确定这是否可以缓解 CPU 或 IO 压力)

碎片化的索引会导致更高的 CPU 使用率吗?

还有什么我可能会错过的吗?

TIA

sql-server-2008 sql-server sql-server-2008-r2

6
推荐指数
1
解决办法
3293
查看次数

SQL Server 2012 中的 DTUTIL 性能较慢?

我们注意到,自部署 Windows 2012/SQL Server 2012 以来,性能DTUTIL有所下降。DTUTIL.exe在 8 GB VM 上的 2 个核心中的每一个上消耗 50%。针对 Win 2008 R2/SQL Server 2008 R2 的相同语法显示对具有相似规格的 VM 几乎没有影响。总的来说,部署一个包大约需要 90-120 秒。

我们在 SP1 上使用 64 位 SQL Server 2012 企业版;命令的语法是:

"C:\Program Files\Microsoft SQL Server\110\DTS\Binn\dtutil.exe" /DestS COMPUTER1 /FILE "e:\folder\SSISPackage.dtsx" /COPY "SQL;FOO\BAR\SSISPackage" /QUIET 
Run Code Online (Sandbox Code Playgroud)

我们还没有在 2012 年使用新的 SSIS 方法尝试过这个。我们已经验证了跨多个不同包的行为重现。我们还查看了所有 SP1 之后的累积更新;它们似乎没有解决这个问题,但我们也没有应用它们来排除这个问题。

有没有其他人遇到/解决过这个问题?诚然,包部署不是高频操作,但我们确实在自动化部署过程中注意到了这一点。

sql-server ssis ssis-2012

6
推荐指数
1
解决办法
803
查看次数

存储过程或命令使用哪些参数执行?

我们正在使用nHibernate它从.NET代码生成查询。有时,某些查询会卡在sp_whoisactive列表中,我们无法找出原因。我有一种感觉,它与丢失或损坏的参数有关。sp_whoisactive但是,当我运行时,我只看到参数名称(在示例中:)@p0,而不是实际值。有没有办法在进程仍在运行时检索此信息?

例子:

SELECT 
    this_.Id as Id6_2_, this_.HRNumber as HRNumber6_2_, 
    this_.FirstName as FirstName6_2_, this_.LastName as LastName6_2_, 
    this_.StatusTypeID as StatusTy5_6_2_, 
    this_.PropertyId as PropertyId6_2_, this_.DepartmentGroupId as Departme7_6_2_, 
    property2_.PropertyID as PropertyID10_0_, 
    property2_.PropertyCode as Property2_10_0_, 
    property2_.LMSCode as LMSCode10_0_, property2_.PropertyName as Property4_10_0_, 
    property2_.Report as Report10_0_, department3_.Id as Id4_1_, 
    department3_.Name as Name4_1_, department3_.DisplayName as DisplayN3_4_1_ 
FROM 
    [dbo].[EmployeeDepartmentGroupView] this_ 
LEFT OUTER JOIN
    [dbo].[Property] property2_ ON this_.PropertyId=property2_.PropertyID 
LEFT OUTER JOIN
    [dbo].[DepartmentGroup] department3_ ON this_.DepartmentGroupId=department3_.Id 
WHERE 
    this_.HRNumber LIKE @p0;
Run Code Online (Sandbox Code Playgroud)

请注意,这是从 …

sql-server-2008-r2 nhibernate

6
推荐指数
1
解决办法
672
查看次数

将当前服务器名称从 SQL Server 代理作业传递到 PowerShell

我有一个 SQL Server 代理作业,它在一个步骤中调用 PowerShell 脚本。我想将 SQL 服务器名称和当前作业 ID 传递给我的脚本。

有了工作 ID,我没有问题。但是使用服务器名称...

我的 PowerShell 调用如下所示:

.\StopServices.ps1 -ServerName $(ESCAPE_DQUOTE(A-SVR)) -JobId $(ESCAPE_DQUOTE(JOBID))
Run Code Online (Sandbox Code Playgroud)

作业 ID 工作正常,但服务器名称为空。

如何将服务器名称传递给我的 PowerShell 脚本?

powershell sql-server-agent

6
推荐指数
1
解决办法
1437
查看次数

聚集列存储索引性能 SQL Server 2014

我正在使用 SQL Server 2014 设置一个 OLAP 数据库。核心事实表有大约 40,000,000 行、225 列,平均行大小为 181 字节。我一直在玩聚簇列存储索引,但运气不佳。一般来说,我发现使用新技术时查询性能要慢 4 倍以上。

一个特殊的例子 - 使用 int32 主键选择单行现在需要 12 秒......这是对行存储表的亚秒操作(当然它在 PK 上有一个唯一索引,这不允许与聚集列存储索引)。

我试图找出我做错了什么 - 从 MS 文档中听起来这是完成这项任务的理想技术;也许我错过了一些东西。

我正在 Windows 8.1 64 位上运行 SQL 2014 Enterprise,具有 128GB RAM 和 SSD 用于数据存储。此应用程序的数据是只读的。

sql-server olap columnstore

6
推荐指数
1
解决办法
1045
查看次数

SQL Server 和 SSPI 握手失败错误

最近我遇到了一个问题,来自一个域的用户无法登录 SQL Server 并收到此错误:

错误:17806,严重性:20,状态:2。SSPI
握手失败,错误代码为 0x8009030c,同时建立具有集成安全性的连接;连接已关闭。[客户:xxxxxx]

错误:18452,严重性:14,状态:1
。用户登录失败”。用户未与受信任的 SQL Server 连接相关联。[客户:xxxxxx]

我们有两个域,比如说 A 和 B。我的 SQL Server 在域 B 中运行。在正常情况下,两个域用户都能够连接。但是前几天,域A的所有用户都无法连接到域B中运行的SQL Server。但是域B的用户却能够成功连接。用户联系 SQL Server DBA 团队调查问题。

当我检查时,即使我无法使用 SSMS 并使用域 A 的凭据远程连接到 SQL Server。但是,当我尝试使用域 A 的凭据对服务器进行 RDP 时,它工作正常,并且在远程访问 SQL Server 后也开始工作美好的。所以在我看来,当我对服务器进行 RDP 时,某些东西得到了刷新并且我的登录远程开始正常工作。我确信实际问题与 AD 和 kerberos 身份验证有关,但无法证明。

我在网上研究了这个问题,并找到了两个解决方案来解决它。一是修复故障 DC,二是重新启动运行 SQL Server 的服务器。我采用了第二种方式,因为 Windows 管理员不接受这是 DC 问题。我从 SQL 端检查了所有内容,最近没有任何变化。还发现在运行 SQL Server 的服务器上记录以下事件后,此问题开始发生:

日志名称:系统
来源:NETLOGON
日期:xxxxxxxx
事件 ID:5719 任务
类别:无
级别:错误
关键字:经典
用户:不适用
计算机:xxxxxxxxxx
描述:这台计算机无法与域控制器建立安全会话domain xxxxxx 由于以下原因: 当前没有可用于为登录请求提供服务的登录服务器。这可能会导致身份验证问题。确保此计算机已连接到网络。如果问题仍然存在,请联系您的域管理员。

附加信息 如果此计算机是指定域的域控制器,它会设置与指定域中的主域控制器模拟器的安全会话。否则,此计算机将与指定域中的任何域控制器建立安全会话。

我的问题是:

  1. 如何证明这是域控制器问题?
  2. 服务器重启如何解决这个问题? …

authentication sql-server windows-server

6
推荐指数
1
解决办法
5241
查看次数