Questions tagged «sql-server-2012»

SQL Server 2012(主要版本11.00.xxxx)。还请标记sql-server。

2
使用XML阅读器优化计划
从此处执行查询以将死锁事件从默认扩展事件会话中拉出 SELECT CAST ( REPLACE ( REPLACE ( XEventData.XEvent.value ('(data/value)[1]', 'varchar(max)'), '<victim-list>', '<deadlock><victim-list>'), '<process-list>', '</victim-list><process-list>') AS XML) AS DeadlockGraph FROM (SELECT CAST (target_data AS XML) AS TargetData FROM sys.dm_xe_session_targets st JOIN sys.dm_xe_sessions s ON s.address = st.event_session_address WHERE [name] = 'system_health') AS Data CROSS APPLY TargetData.nodes ('//RingBufferTarget/event') AS XEventData (XEvent) …

3
包含的数据库有缺点吗?
SQL Server 2012引入了“包含”数据库的概念,其中数据库所需的所有内容(包括大部分内容)都包含在数据库本身中。在服务器之间移动数据库时,这提供了很大的优势。那么,我想知道在设计新数据库时这是否应该作为我的默认策略。 MSDN列出了所包含数据库的几个缺点,最大的缺点是缺少对更改跟踪和复制的支持。还有其他吗?如果我不打算使用这些功能,是否有任何理由不使用包含的数据库?

1
XML索引的性能非常奇怪
我的问题基于此:https : //stackoverflow.com/q/35575990/5089204 为了给出答案,我做了以下测试场景。 测试场景 首先,我创建一个测试表并用100.000行填充它。一个随机数(0到1000)应导致每个随机数约100行。此数字放入varchar列中,并作为XML中的值。 然后,我像OP那样进行呼叫,需要使用.exist()和.nodes()进行第二次调用,但是第二步的优势不大,但是两者都需要5到6秒钟。实际上,我进行了两次调用:第二次以交换顺序进行,搜索参数略有变化,并使用“ // item”而不是完整路径,以避免通过缓存的结果或计划产生误报。 然后创建一个XML索引并执行相同的调用 现在-真正让我惊讶的是!- .nodes具有完整路径的速度比以前(9秒)要慢得多,但是.exist()降低到半秒,而具有完整路径的时间甚至可以降低到约0.10秒。(同时.nodes()具有短的路径比较好,但仍远远落后于.exist()) 问题: 我自己的测试简而言之:XML索引会极大地破坏数据库。它们可以极大地加快处理速度(例如,编辑2),但也会降低查询速度。我想了解它们的工作原理...什么时候应该创建XML索引?为什么.nodes()有了索引会比没有索引更糟糕?如何避免负面影响? CREATE TABLE #testTbl(ID INT IDENTITY PRIMARY KEY, SomeData VARCHAR(100),XmlColumn XML); GO DECLARE @RndNumber VARCHAR(100)=(SELECT CAST(CAST(RAND()*1000 AS INT) AS VARCHAR(100))); INSERT INTO #testTbl VALUES('Data_' + @RndNumber, '<error application="application" host="host" type="exception" message="message" > <serverVariables> <item name="name1"> <value string="text" …

2
为什么在SQL Server 2012中查询结果为空的错误?
在MS SQL Server 2012中运行以下查询时,第二个查询失败,但第一个查询失败。同样,如果在没有where子句的情况下运行,则两个查询都会失败。我很茫然,为什么两个都失败,因为两个都应该有空结果集。任何帮助/见解表示赞赏。 create table #temp (id int primary key) create table #temp2 (id int) select 1/0 from #temp where id = 1 select 1/0 from #temp2 where id = 1

3
在什么时候每个客户端只能使用一个数据库?
对于我们的系统之一,我们拥有敏感的客户端数据,并将每个客户端的数据存储在单独的数据库中。该系统大约有10-15个客户端。 但是,我们正在开发一个新的系统,它将具有50-100个客户端,也许还会更多。我认为在这种情况下,每个客户端只有一个数据库(存储敏感记录和审核历史记录)可能是不可行的。但是我不知道这是否完全正常,或者是否存在另一种维护安全性的方法。 有什么想法吗?

1
如何卸载SQL Server Management Studio 2012?[关闭]
如何卸载SQL Server Management Studio 2012? ControlPanel的“卸载或更改程序”(在Windows 7 Prof中)提供一行条目: 而Internet搜索结果始终表明:“单击Microsoft SQL Server 2005,然后单击更改” 更新(评论肖恩·梅尔顿的答案): 选择“ Microsoft SQL Server 2012(64位)”->卸载/更改后,我观察到: 并且在没有任何SSMS或继续选项的情况下选择“删除”,“设置支持规则”后:

3
评估合理的缓冲池大小的确定方法是什么?
我试图提出一种理智的方法来了解max server memory (mb)设置是否合适(应该设置得更低还是更高,或者保持原样)。我知道max server memory (mb)应该始终足够低以为操作系统本身等留出空间。 我正在查看的环境有几百台服务器;我需要一个可靠的公式来确定缓冲池的当前大小是否合适,因为RAM是按分配给每个服务器的每GB的成本来计算的。整个环境已虚拟化,分配给VM的“物理” RAM可以轻松更改。 我现在正在查看一个特定的SQL Server实例,它的PLE为1,100,052秒,相当于12.7天(服务器已启动的时间)。该服务器的最大服务器内存设置为2560MB(2.5GB),其中实际仅提交了1380MB(1.3GB)。 我读过几个项目,包括一个由Jonathan Keheyias(职位),另一个由保罗·兰德尔(岗位),和其他几个人。Jonathan提倡监视每4GB缓冲池中的PLE在300以下,因为它太低了。对于上述SQL Server实例,300 * (2.5 / 4) = 187目标PLE确实非常低,低于300。此实例具有290GB的SQL Server数据(不包括日志文件),仅用于集成测试。假设在过去的12天代表该服务器的典型用法的,我想说的max server memory (mb)设置可能会降低。 在规模的另一端,我有另一台集成测试服务器,其PLE为294,其max server memory (mb)设置仅为1GB。该服务器仅具有224MB的SQL Server数据(不包括日志),并且正在运行某些BizFlow数据库。该服务器可能会受益于更高的max server memory (mb)设置。 我正在考虑为可能分配过多内存的目标提供一个良好的起点,其中包括: SELECT RamMB = physical_memory_in_bytes / 1048576 , BufferPoolCommittedMB = bpool_committed * 8192E0 / 1048576 , BufferPoolCommitTargetMB = …

19
SQL Server Management Studio缓慢打开新窗口
将SQL Server和Management Studio从2008升级到2012后,打开新的查询窗口和对话框时,Management Studio 2012的运行速度非常慢。 即使右键单击表格也很慢。在开始在窗口内执行任何操作之前,通常至少要延迟5秒。即使我连续两次打开同一个窗口,每次也会发生这种情况。为什么会发生这种情况,我该如何解决? 其他应用程序可以非常快速地建立与数据库的连接。 我尝试过的事情没有帮助: 我需要修改hosts文件的Google热门产品 重置SSMS“用户定义的设置” 更新视频驱动程序,关闭硬件加速,禁用DirectX 禁用生物特征认证服务(我没有安装)。 我的计算机应该足够快,而且我还有16GB的RAM。我的硬件绝对应该不是问题。看起来SSMS正在等待某件事-在这种情况下,我可以顺利运行其他程序。 我没有机会安装SQL Server 2012 CU1更新,因为安装修补程序似乎有一些错误的风险,我现在不能冒险。

2
在阻止的流程报告中清空阻止流程
我正在使用扩展事件来收集阻止的流程报告,并且由于某些原因,某些报告中该blocking-process节点为空。这是完整的xml: <blocked-process-report monitorLoop="383674"> <blocked-process> <process id="processa7bd5b868" taskpriority="0" logused="106108620" waitresource="KEY: 6:72057613454278656 (8a2f7bc2cd41)" waittime="25343" ownerId="1051989016" transactionname="user_transaction" lasttranstarted="2017-03-20T09:30:38.657" XDES="0x21f382d9c8" lockMode="X" schedulerid="7" kpid="15316" status="suspended" spid="252" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2017-03-20T09:39:15.853" lastbatchcompleted="2017-03-20T09:39:15.850" lastattention="1900-01-01T00:00:00.850" clientapp="Microsoft Dynamics AX" hostname="***" hostpid="1348" loginname="***" isolationlevel="read committed (2)" xactid="1051989016" currentdb="6" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame line="1" stmtstart="40" sqlhandle="0x02000000f7def225b0edaecd8744b453ce09bdcff9b291f50000000000000000000000000000000000000000" /> <frame line="1" …

4
检查SQL Server数据库中是否存在用户
我正在使用SQL Server2012。我想在将用户添加到数据库之前检查用户是否存在。 这是我测试过的: USE [MyDatabase] GO IF NOT EXISTS (SELECT name FROM [sys].[server_principals] WHERE name = N'IIS APPPOOL\MyWebApi AppPool') Begin CREATE USER [IIS APPPOOL\MyWebApi AppPool] FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo] end ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool] GO 但是,SELECT name FROM [sys].[server_principals]如果该用户存在于中,则此代码不会返回MyDatabase。 如何检查用户是否存在MyDatabase?


2
插入大量行的最快方法是什么?
我有一个数据库,在其中我将文件加载到临时表中,从该临时表中我有1-2个连接来解析一些外键,然后将这些行插入到最终表中(每月有一个分区)。我有大约34亿行用于三个月的数据。 使这些行暂存到最终表中的最快方法是什么?SSIS数据流任务(使用视图作为源并激活快速加载)或插入INTO SELECT ....命令?我尝试了“数据流任务”,并在5个小时内可以得到大约10亿行(8核/服务器上192 GB RAM),这对我来说感觉很慢。

1
为什么查询导致溢出到tempdb?
背景 我正在将160gb数据库从具有48gb RAM的Win 2008服务器上的MSSQL 2008(标准)迁移到具有64gb RAM的Win 2012上运行MSSQL 2012(64位网络版)的新服务器上。旧服务器处于活动状态并处于负载状态;新服务器未投入生产。新服务器具有8个tempdb文件(每个4GB)。 问题 在新服务器上进行测试时,我看到许多查询中的步骤引起警报,提示“操作员在执行过程中使用tempdb溢出数据”。我已经能够通过重写一些查询来避免排序,但这并不能真正解决问题。旧服务器上的相同查询不会引起溢出。我读过,当MSSQL无法完成内存中的操作并不得不溢出/分页到tempdb中时,就会发生溢出。我应该担心泄漏吗? 例子 我已经在数据库上运行了sp_updatestats,因此统计信息应该是最新的,但是您会注意到估计的行数与实际的行数之间存在一些差异。 内存问题 我已为64GB的MSSQL设置了最大内存设置。当前,MSSQL已消耗了大约35gb的内存,但是工作集只有682mb。旧服务器(尽管在生产中,正在处理负载)具有44gb的内存分配给MSSQL,其中43.5gb在其工作集中。 我不知道泄漏是否与记忆设置有关-任何人有任何想法吗?MSSQL当前有英亩的可用内存,那么为什么它会因某种排序和散列匹配而溢出到tempdb中?

4
从一台服务器复制(数百个)表到另一台服务器(使用SSMS)
我必须将几百张表(当前为466张,但仍在增长)从一台服务器复制到另一台服务器。 我以前从来没有做过此事,所以我完全不确定如何处理它。所有表格的格式相同:Cart<Eight character customer number> 这是一个较大的项目的一部分,我将所有这些Cart<Number>表合并到一个Carts表中,但这是一个完全不同的问题。 有没有人有我可以用来复制所有这些表的最佳实践方法?如果有帮助,两台服务器上的数据库名称相同。就像我之前说的,我拥有该sa帐户,因此我可以执行将数据从A传输到B所需的一切。两个服务器也都在同一个服务器场中。

2
如何分析存储过程
我正在使用SQL Server 2012,并且想知道如何配置存储过程 例如,探查器可以捕获存储过程中的每个单独的SQL语句,它是什么以及运行需要多长时间等? 我正在尝试诊断合并复制存储过程,并且必须在合并代理的完整运行中捕获这一点。似乎不可能抓住存在性能问题的存储过程并再次运行它,因为这并不慢。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.