我们在数据库应用程序中遇到了一个令人困惑的问题。 我们正在运行3个不同的(但类似spec'd)环境中的应用程序。 Select Insert Env1 0.81ms 0.94ms Env2 0.69ms 5.79ms Env3 0.52ms 15.61ms 我们在3个环境中对磁盘和内存性能进行了基准testing。 Env3稍快于Env2,稍快于Env1(不超过10%)。正如你所预料的那样,Env3中的select比Env2中的select略快于Env1中的select。 但是,Env1中的插入比Env2 快5倍,比Env3 快15倍 。 在Env2和Env3中写入的性能可能很差吗? 一些相关的背景资料。 上面的数据是通过我们编写的testing应用程序来收集的,以便尝试和诊断问题。 select和插入是基本的,并在一张小桌子上执行。 我们的testing应用… a)是用C#编写的,并使用基于System.Data.SqlClient.SqlConnection的类。 b)通过执行1000次的动作并将所花费的时间除以1000来计算平均次数。 c)在两种模式下工作… 一世。 我们的代码称为插入/select/更新1000次 II。 我们的代码称为单个存储过程,称为insert / select / update 1000次 d)与数据库在同一台机器上运行 除非存储过程称为更新,否则更新会受到类似于插入的影响。 当存储过程在Env3中调用更新时,它比Env1慢了4倍,但是当客户端调用1000更新时,速度慢了17倍。 下面的扩展表格说明了不同之处。 环境。 Select SP Select Insert SP Insert Update SP Update Env1 0.81ms 0.015ms 0.94ms 0.72ms […]
我们有一个2台四核至强5550处理器的服务器。 安装在服务器上的唯一应用程序是SQL服务器。 CPU使用率很less超过40%,事务处理速率是每秒2000个事务。 处理器队列的长度也大约为2.一切似乎都正常,除了在工作时间内上下文切换的平均值为88,000,最大值为23.2万。 我已经在SQL服务器文档中读到大于15,000的上下文切换号码指示CPU问题。 这实际上是一个问题,即使CPU计数器看起来正常?
我们有一台运行SQL Server 2008的服务器。 当我们用一些loginSSMS(来自SSMS 2008)连接到它时,Intellisense可用。 对于其他人则不是。 有问题的login连接到同一个数据库,除了用于连接的login名之外,其他任何内容都不会在SSMS会话之间改变。 如果我作为db_owner成员的login进行连接,则Intellisense将起作用。 如果我作为不在db_owner中但具有“查看定义”特权的login进行连接,则Intellisense将起作用。 如果我以不在db_owner或具有“查看定义”特权的login身份进行连接,则Intellisense不起作用。 所以我试图授予第三个login“视图定义”权限的数据库,认为他们会得到Intellisense。 没有运气。 第三次login可以访问另外两个数据库。 在所有三个数据库中,此login名是db_datareaderangular色的成员,但没有其他angular色(也没有“视图定义”特权)。 在这两个其他数据库中,此login名获得Intellisense。 在主数据库中,它不是。 在我看来,有一些每个数据库和每个login设置/权限,允许智能感知,但到目前为止,我一直无法追查下来。 有任何想法吗?
我必须将SQL Server 2000现有数据迁移到SQL Server 2005 。 两个数据库的模式是不同的。 例如SS2000中的Locations表分成两个表格,并且具有不同的列。 这是一次性活动。 成功迁移后,我不再需要旧的分贝。 将数据从一个SQL Server传输到另一个具有不同模式的另一个最佳方式是什么? 我可以编写存储过程从SQL Server 2000获取数据,并在SQL Server 2005 insert/update表。 SSIS呢? 我没有这方面的经验,这是更好的SSIS包创build,因为我不需要这个,需要先学习它。 谢谢。
有一个由SQL 2005服务器支持的单一Sharepoint Web服务器。 Sharepoint服务器在文档库中有一个混乱的文档,并且从前一天开始有一个SQL数据库备份。 我有什么select让文件回来?
我需要备份SQL-Server 2005的默认跟踪日志文件(%sqlserverpath%\ MSSQL \ LOG \ log _ *。trc),当它被创build时它不inheritance目录文件权限(Windows 2003服务器),所以我得到访问被拒绝与我的“备份服务”用户做文件复制。 任何想法?
我有一个使用SQL Server 2000中不存在的function的脚本。具体来说,该脚本将创build一个使用SQL Server 2005中添加的数据types的存储过程。 我需要使用条件逻辑来确保(1)服务器版本是2005或更高版本,(2)目标数据库的兼容级别是2005或更高版本。 而且,这个脚本需要在SQL Server 2000上运行没有错误,显然不需要添加新的存储过程。 我正在成功parsingSERVERPROPERTY('productversion')来确定服务器版本。 但是,我可以find有关访问兼容级别的所有信息,请参阅SELECT COMPATIBILITY_LEVEL FROM sys.databases WHERE [name] = ('DBName') for SQL Server 2005+,并从SQL Server 2000上的sysdatabasesselect。不幸的是,这些方法都无法工作所有需要运行的四个SQL Server版本(2000,2005,2008,2008 R2)。 想法?
我通过batch file运行批处理,我希望SQL服务器loggingreslt当我从我的batch file执行我的DBCC SHRINKFILE命令。 有没有办法做到这一点? 例如: – Run.bat rem Shrink transaction log and log the result "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -E -Q "Use [Database] DBCC SHRINKFILE(Database_log, 50)"
我最近被要求把我们的数据库的一个.bak文件发送到客户端,并通过重新索引100%填充因子(以确保没有空插槽)的所有表,并调整事务日志的大小,并“缩小”文件仍然很大(在7zipping之前)。 我无法find有关在.bak任何地方发生索引数据的信息。 所以,问题是,.bak文件已经排除了索引数据吗? 或者有没有一种方法,剥夺所有索引数据之前采取.bak,只是在恢复重build? 我曾尝试寻找类似的职位发布之前,道歉,如果这已被问及/回答。 是否有一套已知的步骤来制作最小的可恢复的.bak文件 a)不关心transcations(你在单用户模式下,所有的交易都提交)。 b)不关心可以重build的索引/统计数据 c)不关心恢复需要多长时间。
我有一个小的虚拟化环境,托pipe一个内部数据库后端的小型网站。 我目前已将我的Web服务器和数据库服务器分离到运行在相同硬件上的单独虚拟机上。 但是,我想知道是否更好的策略可能是将dev / prod数据库服务器整合到同一个VM上,但使用不同的实例? 我使用SQL镜像来实现冗余,所以我理论上从4个SQL虚拟机到2个虚拟机。优点是可以pipe理更less的虚拟机,更简单的资源分配,并保证dev和prod在同一个补丁/服务包级别。 这种方法有什么缺点? 如果我在Windows服务器上安装默认的MSSQL实例,我可以再次运行安装程序来创build第二个(已命名)实例并将其用于其他环境? 最后,如果我将两个分配给同一个VM,是否可以将不同的实例放在不同的IP地址后面?