Questions tagged «sql-server»

与Microsoft SQL Server有关的问题。如果您的问题是特定于版本的,请也为该版本专门标记。您的SQL Server问题属于这里还是其他站点?单击下面一行中的关于sql-server标记的链接。

1
在SQL Server中删除LOB数据的性能
这个问题与此论坛主题有关。 在我的工作站和一个企业版两节点虚拟机群集上运行SQL Server 2008 Developer Edition,我将其称为“ alpha群集”。 删除带有varbinary(max)列的行所花费的时间与该列中数据的长度直接相关。起初听起来似乎很直观,但是经过调查,这与我对SQL Server通常如何实际删除行并处理此类数据的理解相矛盾。 该问题源于我们在.NET Web应用程序中看到的删除超时(> 30秒)问题,但是为了进行讨论,我将其简化了。 删除记录后,SQL Server会将其标记为要在事务提交后稍后由Ghost清除任务清除的虚影(请参阅Paul Randal的博客)。在删除varbinary(max)列中分别具有16 KB,4 MB和50 MB数据的三行的测试中,我看到这种情况发生在页面的数据行部分以及事务中日志。 在我看来,奇怪的是,在删除过程中,X锁被放置在所有LOB数据页上,而这些页被重新分配在PFS中。我在事务日志中以及DMV sp_lock和的结果中都看到了这一点。 dm_db_index_operational_statspage_lock_count 如果这些页面尚未在缓冲区高速缓存中,则会在我的工作站和我们的alpha群集上创建一个I / O瓶颈。实际上,page_io_latch_wait_in_ms来自同一DMV的删除实际上是删除的整个持续时间,并且page_io_latch_wait_count与锁定页面的数量相对应。对于我的工作站上的50 MB文件,从一个空的缓冲区高速缓存(checkpoint/ dbcc dropcleanbuffers)开始时,这相当于3秒钟以上,而且毫无疑问,碎片和负载较重时它会更长。 我试图确保它不只是在缓存中分配空间占用了该时间。在执行删除操作而不是checkpoint方法之前,我从其他行中读取了2 GB的数据,这比分配给SQL Server进程的数据还要多。不知道这是否是有效的测试,因为我不知道SQL Server如何对数据进行重新排序。我以为它将总是以旧为新。 此外,它甚至不修改页面。我可以看到这一点dm_os_buffer_descriptors。删除后页面是干净的,而所有三个小,中和大删除的修改页面数均小于20。我还比较DBCC PAGE了查找页面抽样的输出,并且没有变化(仅从ALLOCATEDPFS中删除了该位)。它只是重新分配它们。 为了进一步证明页面查找/取消分配是导致此问题的原因,我尝试使用文件流列而不是vanilla varbinary(max)进行相同的测试。无论LOB大小如何,删除都是固定时间。 所以,首先我的学术问题: 为什么SQL Server需要查找所有LOB数据页才能X锁定它们?这只是锁在内存中如何表示的详细信息(以某种方式存储在页面中)吗?如果未完全缓存,则这将导致I / O影响很大程度上取决于数据大小。 为什么X只是为了解除分配而锁定?仅仅取消索引叶与行内部分是否足够,因为取消分配不需要修改页面本身?还有其他方法可以获取锁定保护的LOB数据吗? 考虑到已经有专门用于此类工作的后台任务,为什么还要完全取消分配页面呢? 也许更重要的是,我的实际问题: 有什么方法可以使删除操作有所不同?我的目标是不管文件大小如何,都恒定时间删除,这与文件流类似,在文件删除之后,任何清除操作都会在后台进行。是配置的东西吗?我会奇怪地存储东西吗? 这是如何重现描述的测试(通过SSMS查询窗口执行)的方法: CREATE TABLE [T] ( [ID] …
16 sql-server 

3
SQL Server中的超时保存表
我正在尝试使用SSMS在SQL Server 2005中向具有大量数据的表中添加一列。 因此,我浏览到该表,选择“修改”,然后添加新列。然后,当我按保存时,出现以下警告: 保存定义对具有大量数据的表进行更改可能会花费大量时间。保存更改时,将无法访问表数据 我可以,数据库处于脱机状态,并且我一直在世界各地,所以按是。 但是,此消息大约30秒后,操作将继续超时: 无法修改表格。超时时间已到。在操作完成之前超时或服务器没有响应。 然后,当我按OK时: 用户取消了保存对话框(MS Visual Database Tools) 我不明白 我在SSMS连接对话框中和工具->选项->查询执行-> SQL Server下都将执行超时设置为0(无限)。如果只是忽略执行超时,设置时间有什么意义? 有谁知道这里使用了什么超时值,以及如何设置它?

6
意外DBA的资源[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 在Microsoft平台内,大多数企业级程序(SharePoint,任何System Center应用程序,任何Dyamics应用程序等)都运行在SQL Server之上。对于这些程序的管理员来说,SQL Server通常是一个黑匣子,它是所有程序主要关注的前提条件。结果,很少有计划(如果有的话)进入安装的SQL端,从而导致问题出现在更上游的地方。 填充驱动器的事务日志 没有维护计划(或不知情的计划,例如重新组织和重建索引的计划) 不受管理的自动增长 数据库和日志位于同一主轴上 选择的RAID级别不佳 没有备份(或恢复计划) 那么...“偶然的DBA”会遇到哪些类型的问题,哪些资源最能帮助意外的DBA加快SQL计划,管理和性能调整的基础?

6
如何更改SQL Server数据库的排序规则?
我正在尝试在一个归类-Latin1_General_CI_AS(标准归类)上标准化所有数据库。我有一些SQL_Latin1_General_CP1_CI_AS中的数据库。 我知道我可以使用ALTER DATABASE更改数据库排序规则,但这只会影响新对象。我的理解是,更改现有列的唯一方法是在每个表的每个列上执行ALTER COLUMN-我需要删除并重新创建所有索引才能做到这一点。 我想它看起来像这样: DROP INDEX indexname ON tablename GO ALTER TABLE tablename ALTER COLUMN columname varchar(50) COLLATE Latin1_General_CI_AS NULL GO CREATE CLUSTERED INDEX indexname ON tablename (columname ASC) 并对整个数据库中的每个varchar,char,text,nvarchar,nchar和ntext列重复一次。那将是一个巨大的 SQL脚本。 有没有更简单的方法可以执行此操作,或者有人可以建议自动创建SQL脚本的方法吗?


8
SQL Server还原备份导致错误
我在dev(Windows Server 2008上的SQL Server 2005)中有一个数据库,需要转移到prod(Windows Server 2003上的SQL Server 2000)。我的过程如下: 登录到开发人员,打开SQL Server Management Studio 右键单击数据库| 任务 备份。保留所有默认选项(完整备份等) 将.bak文件本地移动到产品(没有网络驱动器),登录到产品,然后打开SQL Server企业管理器。 右键单击“数据库”节点| 所有任务| 恢复数据库。 更改“还原为数据库”以反映相同的数据库名称。 单击“从设备”单选按钮。点击“选择设备” 单击从以下位置还原:添加...,浏览到.bak文件(小-仅6mb) 现在,我准备还原数据库,因此单击“确定”并得到以下错误: “设备'E:... bak'上的媒体族格式不正确。SQLServer无法处理该媒体族。RESTOREDATABASE异常终止。” 此错误是立即的。 我尝试了几种不同的变体-使用不同的数据库名称和日志文件名(它起源的地方)将数据库还原到开发机,创建一个空的数据库,该数据库之前具有相同的文件物理路径,并尝试还原到该数据库,制作几个不同的.bak文件,并确保在将它们上传到产品之前已通过验证。我知道一个事实,.mdf和.ldf文件的目录存在于prod上,尽管文件本身不存在。如果在单击“确定”还原之前,请转到“选项”选项卡,但出现以下错误: 错误3241:设备'E:... bak'上的媒体系列格式错误。SQL Server无法处理此媒体系列。RESTORE FILELIST正在异常终止。 有人有什么好主意吗?

11
SQL-登录前握手期间发生错误
直到昨天晚上,我才可以从本地计算机连接到服务器。现在,出现以下错误: 已成功与服务器建立连接,但登录前握手期间发生错误。(提供程序:SSL提供程序,错误:0-等待操作超时。)(.Net SqlClient数据提供程序) 注意,我可以毫无问题地登录到实际服务器。 昨天,我在计算机上安装了IIS,并使用我的IP地址建立了一个站点-不知道这有什么关系。 我确实看了这篇文章,遵循了步骤,但是似乎没有帮助。 http://escapekeys.com/microsoft-sql-server-error-64-a-connection-was-successfully-built-with-the-server/89 我还阅读了以下文章,更改了TC / IP设置,重新启动,但是什么也没有。 http://blog.sqlauthority.com/2009/05/21/sql-server-fix-error-provider-named-pipes-provider-error-40-could-not-open-a-connection-to-sql-服务器Microsoft SQL服务器错误/ 我也开始尝试评论中的建议,但是当我意识到自己可能会把事情弄得更糟时就停止了。 那么,为什么会这样/我该如何解决?

2
SQL Server浏览器:为什么禁用它?
我试图通过SQL Server配置管理器启动SQL Server浏览器。然而,不仅是“国家”的SQL Server浏览器stopped,但选项Start,Stop,Pause,Resume,和Restart(,并通过属性对话框无论是在右键快捷菜单)均无效。 (此外,在“属性”对话框中,我尝试了“内置帐户”的所有3个选项:“本地系统”,“本地服务”和“网络服务”。我还尝试了“此帐户”的各种选项。在所有情况下,功能仍然处于禁用状态。) 我最初认为这可能是端口问题。显然,SQL Server Browser使用端口1434。但是,使用名为CurrPorts的程序,我发现任何程序都没有使用端口1434。 有人可以帮忙吗?
15 sql-server 

5
为什么要使数据库脱机?
您出于什么原因在什么情况下使用“脱机” ALTER DATABASE dbName SET OFFLINE功能。 您可以使用脱机数据库执行哪些任务?您只能对离线数据库执行哪些任务?
15 sql-server 

4
如何在同一台或另一台服务器上复制MSSQL数据库?
我正在尝试完成以下任务: 拍摄原始数据库的快照,在另一台服务器上创建副本并进行精确复制? 拍摄原始数据库的快照,在同一服务器上以不同的数据库名称创建副本 但是,由于不能使用MSSQL,我不能这样做。有什么建议么? 附加信息: 原始数据库服务器:SQL Server 2000 目标数据库服务器:SQL Server 2005

9
为什么备份事务日志如此重要?
我们目前正在为客户端实施备份解决方案,而他们的ERP解决方案使用SQL Server。 ERP解决方案是由另一家公司建立的。而且他们告诉我,备份和截断事务日志是超级重要。 我一直在阅读此事务日志,但无论如何我已经备份了整个计算机时,我不明白为什么这是如此重要(我们使用的是ArcServe UDP,它知道SQL Server并使用VSS)。据我了解,SQL Server VM上的清理任务已经在处理截断日志,但是,UDP也允许SQL Server日志截断。 据我了解,事务日志可用于还原损坏的数据库,因为它是所有事务的日志。但是我已经有整个数据库的每小时备份,那么,为什么我会关心呢?


3
DBA谁担心重组或重新建立索引可能会导致数据丢失?
我们有些数据库的索引碎片大于95%。尽我所能告诉我们,索引从未重建过,而重组得更少。多年。 (为了公平起见,这些表似乎确实启用了自动更新的统计信息。为了公平起见,他还勤于备份:每天完整,每小时记录trx日志。) 当我询问时,DBA说他不愿意重建或重组索引。当我问为什么时,他不能说清楚。最后,他说他担心潜在的数据丢失。例如,我们的Great Plains Dynamics会计应用程序使用了其中一个数据库,他对此感到非常焦虑。 我不是DBA,但从我的阅读中可以看出,他的焦虑似乎...难以理解。 我不确定下一步该怎么做。建议我应该如何进行?

4
使用SQL Server(2008),可以在架构中授予创建表权限吗?
使用SQL Server 2008中的安全性,我试图授予用户CREATE TABLE权限,但仅在特定架构内。CREATE TABLE权限仅适用于数据库级别吗? 我可以限制用户仅在模式内创建表吗? 我试过了: USE [databasename] GRANT CONTROL ON Schema :: [schemaname] TO [username] GO 和 USE [databasename] GRANT ALTER ON Schema :: [schemaname] TO [username] GO 但是,用户仍然无法在目标架构内创建表。直到我运行此命令,用户才能创建表: USE [databasename] GRANT CREATE TABLE to [username] GO 格兰特 GRANT数据库权限

6
用于生产数据库的SQL Server Express?
我们将推出一个双重Web /内部事务应用程序,其中每个客户端都有自己的数据库。每个数据库都很小-每个数据库都小于50MB,因此我们想知道使用SQL Express 2008而不是完整的SQL Server是否有意义。 这似乎具有在服务器之间分配磁盘I / O的优点,同时又节省了大量资金(因为小型15K驱动器和二手双核服务器都不便宜)。如果在某个时候我们需要太多服务器,则可以升级到SQL Server ...但是,由于有许多内部用户,这现在似乎太昂贵了(特别是因为我们需要故障转移盒)。 鉴于我们的数据库规模较小,在单个处理器上使用1GB内存和4个内核的使用听起来似乎不太严格。我们永远不会有超过200个并发用户,并且大多数操作将更具事务性(这似乎比重载RAM / CPU更青睐大量的高速磁盘,对吗?) 我是否错过了SQL Server Standard的任何优势,这些优势最初可以证明额外的$ 5-20K投资?

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.