Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

2
从不同版本的备份文件还原数据库
我读到,出于向后兼容的原因,只要您从旧版本还原到新版本,就可以在SQL Server中还原数据库。 有谁知道您是否可以从* .bak文件中为不同版本的SQL Server还原数据库?我们正在通过FTP移动一个非常大的数据库,这将需要几天时间,因此我们只愿意这样做一次。如果在通过FTP传输数据库时没有人响应,我们显然会尝试一下,通过测试看看它是否有效,然后回答我们自己的问题。 以下是获取SQL Server版本详细信息的查询。该productversion格式为{major revision}.{minor revision}.{release revision}.{build number}。在我的情况下,对于源和目标,{release revision}值均为。这样看起来还可以。但是,是不同的。55005512edition 查询: SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY('productlevel'), SERVERPROPERTY('edition') 源数据库: 10.0.5500.0 SP3 Developer Edition (64-bit) 目标数据库: 10.0.5512.0 SP3 Enterprise Edition (64-bit)

1
为什么SQL Server查询不使用超过7MB /秒的磁盘I / O
我有一个固态硬盘,使用IOmeter测试,显示性能超过200MB / s。但是,当我从本地计算机运行任何SQL查询时,Windows资源监视器从不显示高于7MB /秒的磁盘IO。即使对于耗时超过2分钟的查询,这也适用。瓶颈仅来自SSD的7MB /秒是什么? 我在跑: Windows Server 2012标准版 SQL Server 2008 R2 英特尔i7 3820 内存32GB Sandisk SSD

2
事务日志文件的内容更详细
我有一个关于事务日志(简称为LDF)内容的问题。我假设数据库具有完整的恢复模型。 我已经读到LDF文件包含(记录)对数据库的每个操作(处于完全恢复模式)。与期间记录BEGIN TRAN; COMMAND(s); COMMIT有何不同?我问是因为显然您可以回滚事务,但是您不能回滚标准命令(在完全恢复模式下)。 我猜想在事务处理期间,被记录到LDF文件中的内容与常规的完全恢复日志记录中的内容不同。那正确吗?有什么不同?难道每个动作都只包含“撤消”操作吗? 在相关说明中,我听说有使用完整恢复LDF文件来“回滚/撤消”标准查询的商业工具。他们是如何做到的呢?他们是否分析LDF内容并尝试提出逆/撤消运算?

1
来自更远的调用堆栈的DB_ID上下文
在SQL Server中,是否可以DB_ID从较远的调用堆栈中从上下文中获取? 我的目标是在dev沙箱数据库中创建一些方便的工具(并且很容易被发现),使给定其短名称或零散名称的对象的标准名称变得简单明了,并使用相同的短名称删除对象。这些实用程序功能将在单个实用程序数据库中,但会从同一服务器上的其他数据库调用。 从测试中我可以看到: ORIGINAL_DB_NAME()按预期返回连接字符串中的内容,而不是当前上下文(由设置USE [dbname])。 在函数中调用时,DB_NAME()返回定义该函数的数据库的名称。换句话说,函数或存储过程内部的上下文是定义该上下文的数据库的上下文 我知道引擎会跟踪调用堆栈上下的每个数据库上下文(请参见下面的证明)。那么有什么方法可以访问此信息? 我希望能够在调用者数据库的上下文中找到对象并对其进行操作,即使执行代码不在同一数据库中也是如此。例如: use SomeDB EXEC util.dbo.frobulate_table 'my_table' 我知道我能做 EXEC util.dbo.frobulate_table 'SomeDB.dbo.my_table' 但是我真的很好奇,是否可以通过这种方式查询调用堆栈。 更新/注释 我确实从Gabriel McAdams的博客中阅读并下载了代码。这提供了堆栈上上下的调用过程ID的记录,但仍假定所有内容都在同一数据库中。 证明SQL Server可以记住数据库上下文上下调用堆栈 示例:在具有数据库TestDB1和TestDB2的开发服务器上 use TestDB1 GO CREATE FUNCTION dbo.ECHO_DB_NAME() RETURNS nvarchar(128) BEGIN RETURN DB_NAME() END GO use TestDB2 GO CREATE PROCEDURE dbo.ECHO_STACK AS BEGIN DECLARE @name nvarchar(128) SET …
11 sql-server 

2
如何在SQL Server内存和SQL Server Analysis Services内存之间取得平衡
我们有许多配置相同的系统 一台服务器(虚拟或物理) 运行SQL Server(SQL)和SQL Server Analysis Server(AS) 多核 16GB RAM 每天晚上,SQL Server将进行大约2-3个小时的处理,然后进行2-3个小时的AS处理。然后,整天只查询AS。 假设这是一台专用服务器,没有其他应用程序值得关注,并且两组处理是完全同步的-彼此之间始终没有重叠-我该如何最好地设置SQL和AS服务器的内存限制。 问的原因是,如果我不为SQL设置限制,它将获取所有可以使用的内存。但是-我的理解是,在以下情况下,SQL会很乐意放弃该内存: 它没有使用它 另一个服务/程序请求它。 因此,从逻辑角度来看,我相信允许SQL采取所需的一切,但我对AS'不太确定TotalMemoryLimit。我不确定AS是否会放弃它的内存。实际上,阅读更多使我相信,让一切全部使用是错误的。 这是否意味着我实际上需要为两者设置限制?我对最佳实践应该是什么以及在考虑过程不重叠的情况下我们需要衡量的问题感到困惑。 希望这是有道理的。

1
SQL Server缓存刷新和磁盘I / O
我们正在忙于负载测试我们在.NET 4.0中开发的OLTP系统,并在后面运行SQL Server 2008 R2。该系统使用性能非常出色的SQL Server Service Broker队列,但是在处理过程中我们遇到了一种特殊的趋势。 SQL Server处理请求的速度为1分钟,然后增加磁盘写入活动的时间约20秒。下图说明了该问题。 Yellow = Transactions per second Blue = Total CPU usage Red = Sqlsrv Disk Write Bytes/s Green = Sqlsrv Disk Read Bytes/s 在故障排除期间,我们尝试了以下操作,但模式没有任何重大变化: 停止SQL Server代理。 几乎杀死了所有其他正在运行的进程(没有A / V,SSMS,VS,Windows资源管理器等) 删除了所有其他数据库。 禁用所有对话计时器(我们不使用任何触发器)。 从消息队列驱动的方法转移到简单/粗略的表监视设计。 从轻到重使用了不同的负载。 修复了所有死锁。 似乎SQL Server可能正在建立其缓存并以特定的基于时间的时间间隔将其写入磁盘,但是我找不到任何在线资源来支持该理论。 接下来,我计划将解决方案移至我们专用的测试环境,以查看是否可以重现问题。在此期间的任何帮助将不胜感激。 Update 1 根据要求,提供一个图形,其中包括Checkpoint Pages …

1
带函数调用的估计查询计划与实际查询计划
我在SQL Server上有此查询,这是一个合并复制查询: SELECT DISTINCT b.tablenick, b.rowguid, c.generation, sys.fn_MSgeneration_downloadonly ( c.generation, c.tablenick ) FROM #belong b LEFT OUTER JOIN dbo.MSmerge_contents c ON c.tablenick = b.tablenick AND c.rowguid = b.rowguid; 估计的查询计划包括有关3个查询的信息: 上面的查询 函数调用fn_MSgeneration_downloadonly 对fn_MSArticle_has_downloadonly_property的函数调用 实际的查询计划仅包含以下信息: 上面的查询 与功能无关。为什么实际计划中缺少功能信息? 我尝试了以下选项: SET STATISTICS PROFILE ON SET STATISTICS XML ON 它创建了一个实际计划,但缺少第2部分和第3部分,与我在Management Studio中使用实际查询计划选项时相同。 例如,如果我要使用Profiler捕获有关函数调用的信息,我将选择哪些事件? 找不到与查询计划特别相关的答案,但我分析了SP:StmtStarting和SP:StmtCompleted并显示了函数调用。

2
SQL Server备份失败。错误:3041,严重性:16,状态:1
首先,我是stackexchange的新手,所以请多多包涵。 我正在运行SQL Server 9.0.4060。 我的问题是:我的SQL Server备份在很多数据库上一直失败。 维护计划将运行到不同的备份作业: 每天20:30进行DIFF备份,每个星期日在20:30进行完全备份。 我在无法完成备份的foreach数据库中遇到以下两个错误: Date 06-11-2012 20:31:06 Log SQL Server (Current - 07-11-2012 11:43:00) Source Backup Message BACKUP failed to complete the command BACKUP DATABASE (dbname) WITH DIFFERENTIAL. Check the backup application log for detailed messages. Date 06-11-2012 20:31:06 Log SQL Server (Current - 07-11-2012 …

1
SQL Server Snapshot复制是每次完全复制数据还是发出增量?
我正在看两台服务器之间的快照复制。这是我所拥有的: 500GB数据库 每晚约500MB bcp负载 每天约50MB的交易 我正在询问公司中的其他DBA有关使用哪种复制类型的信息。有人告诉我使用快照复制。但是,据我了解并一直在阅读,每晚加载快照后,快照将完全将数据库复制到分发服务器,然后完全覆盖其他服务器。 快照是按增量运行还是每次都完整复制?

2
SQL Server 2012可用性组是否为“ AlwaysON”?
在传统的SQL Server群集中,当发生故障转移时,连接到SQL Server失败实例的所有客户端都会失去连接,并且每个客户端都必须重新建立与故障转移群集实例的新连接。 AlwaysON可用性组是否可以缓解此问题?如果SQL Server 2012 AlwaysON可用性组的故障转移对连接到SQL Server的客户端透明吗?

2
将已发布的复制数据库的数据库兼容性级别从90更改为100的影响
我有一台SQL Server 2008 R2服务器,其中有一堆已发布的数据库,这些数据库当前在兼容级别90(2005)下运行。 订阅数据库也是SQL Server 2008 R2,但是目标数据库设置为兼容性级别100,并且复制工作正常。 如果更改发布数据库的兼容性级别,它将以任何方式影响复制,还是只是重新初始化所有订阅并重新启动复制的情况? 我怀疑更改已发布的数据库兼容性级别可能会稍微更改复制存储过程的功能,但是我不确定100%。 是这样吗

3
SQL Server 2008日期时间索引性能错误
我们使用的是SQL Server 2008 R2,它有一个很大的表(100M +行),带有主ID索引,而一datetime列则具有非聚集索引。基于使用专门用于索引datetime列的order by子句,我们看到了一些非常不寻常的客户端/服务器行为。 我通读了以下帖子:https : //stackoverflow.com/questions/1716798/sql-server-2008-ordering-by-datetime-is-too-slow, 但是客户端/服务器上发生的事情比实际发生的更多在这里开始描述。 如果我们运行以下查询(已编辑以保护某些内容): select * from [big table] where serial_number = [some number] order by test_date desc 查询每次都会超时。在SQL Server Profiler中,执行的查询在服务器上看起来像这样: exec sp_cursorprepexec @p1 output,@p2 output,NULL,N'select * ..... 现在,如果将查询修改为: declare @temp int; select * from [big table] where serial_number = [some number] order …

1
不屈服的IOCP侦听器
有人知道“不屈服的IOCP侦听器”指示什么吗? 在我们的SQL Server中,只有一个错误检查转储: ===================================================================== BugCheck Dump ===================================================================== This file is generated by Microsoft SQL Server version 9.00.5292.00 upon detection of fatal unexpected error. Please return this file, the query or program that produced the bugcheck, the database and the error log, and any other pertinent information with a Service Request. …


1
以最少的停机时间重新导入大量数据的最佳方法
我每周大约需要导入约500,000条包含IP查找(只读参考)数据的记录(仅三个int / bigint cols)。 我真的不想担心将数据与现有表合并,我希望清除旧表并重新导入。 理想情况下,对数据运行的查询将继续运行(我们不会收到很多查询,可以接受的是,在导入期间它们的运行速度会稍慢一些,但需要提高24/7,所以运行此“时间不足”)。 到目前为止尝试过的事情 SSIS:我创建了一个SSIS包,该包会截断表并导入-运行大约需要30秒(实际上太长)。 临时表:导入到临时表中,进行截断和复制也大约需要30秒钟。 BCP:批量导入也相当慢(由于某种原因,它比SSIS慢(即使没有索引需要维护))-我猜想这与char-> int / bigint事务有关:/ 镜子表?所以,此刻,我想知道如何通过视图读取表,将数据导入到镜像表中以及更改视图以指向该表...这似乎会很快,但是看起来很小对我有点 这似乎应该是一个普遍的问题,但我找不到推荐的做法-任何想法将不胜感激! 谢谢

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.