Questions tagged «sql-server»

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


4
LocalDB v14为mdf文件创建错误的路径
最近,我使用SQL Server Express安装程序和此指令将LocalDB从版本13升级到了版本14。。安装后,我停止了版本13的现有默认实例(MSSQLLOCALDB)并创建了一个新实例,该实例自动使用v14.0.1000服务器引擎。 我经常使用LocalDB进行数据库集成测试,即在我的xunit测试中,我创建一个(临时)数据库,该数据库在测试完成时将被删除。从新版本开始,很遗憾,由于以下错误消息,我的所有测试均失败: 尝试打开或创建物理文件'C:\ Users \ kepflDBd0811493e18b46febf980ffb8029482a.mdf'时,CREATE FILE遇到操作系统错误5(访问被拒绝。) 奇怪的是,mdf文件的目标路径不正确,C:\ Users \ kepfl和DBd0811493e18b46febf980ffb8029482a.mdf(这是单个测试的随机数据库名称)之间缺少反斜杠。通过简单的命令创建数据库CREATE DATABASE [databaseName]-这里没有什么特别的。 在SSMS中,我看到数据,日志和备份的目标位置如下: 但是,当我尝试更新位置时,出现另一条错误消息: 如何更新默认位置,以便LocalDB能够再次创建数据库?很明显,LocalDB没有正确组合默认位置目录和数据库文件名-是否有我可以编辑的注册表项?还是其他? 在道格的回答和坟墓的评论后更新 根据这个Stackoverflow问题,默认位置也应该可以通过注册表更改。但是,如果我尝试找到相应的键“ DefaultData”,“ DefaultLog”和“ BackupDirectory”,则无法在注册表中找到它们。SQL Server v14是否重命名了这些注册表项,还是将这些信息移出了注册表?

3
为什么SELECT查询会导致写入?
我注意到,在运行SQL Server 2016 SP1 CU6的服务器上,有时扩展事件会话会显示导致写入的SELECT查询。例如: 执行计划未显示任何明显的写入原因,例如哈希表,假脱机或可能溢出到TempDB的排序: 将变量分配给MAX类型或自动更新统计信息也可能导致这种情况,但在这种情况下,两者都不是导致写入的原因。 写的东西还有什么呢?


1
为BACKUP命令设置BUFFERCOUNT,BLOCKSIZE和MAXTRANSFERSIZE
我找了实际指导的设定值BUFFERCOUNT,BLOCKSIZE以及MAXTRANSFERSIZE该的BACKUP命令。我做了一些研究(见下文),做了一些测试,并且我完全意识到,任何真正有价值的答案都将以“嗯,这取决于……”开始。我对已经完成的测试以及在我发现的任何资源中显示的测试的担忧(请参见下面的方法)是测试是在真空中完成的,很可能是在没有其他负载的系统上进行的。 我对基于长期经验的这三个选项的正确指导/最佳实践感到好奇:数周或数月的许多数据点。我并没有在寻找特定的值,因为这主要是可用硬件的功能,但是我想知道: 各种硬件/负载因素如何影响应采取的措施。 在任何情况下都不应该覆盖这些值吗? 是否有一些陷阱可以覆盖所有这些并非立即显而易见的陷阱?占用过多的内存和/或磁盘I / O?还原操作复杂吗? 如果我有一台运行着多个SQL Server实例的服务器(一个默认实例和两个命名实例),并且如果我同时运行所有3个实例的备份,那么除了确保集合(BUFFERCOUNT* MAXTRANSFERSIZE)没有超过可用的RAM?可能的I / O争用? 在将三个实例放在一台服务器上并再次在所有三个实例上同时运行备份的相同场景中,在每个实例内同时运行多个数据库的备份又将如何影响这些值的设置?这意味着,如果三个实例中的每个实例每个都有100个数据库,则每个实例每个实例同时运行2或3个备份,这样就可以同时运行6到9个备份。(在这种情况下,我有许多中小型数据库,而不是几个大型数据库。) 到目前为止,我收集了以下内容: BLOCKSIZE: 支持的大小为512、1024、2048、4096、8192、16384、32768和65536(64 KB)字节。[1] 磁带设备的默认值为65536,否则为512 [1] 如果要备份要复制到CD-ROM并从CD-ROM还原的备份,请指定BLOCKSIZE = 2048 [1] 当您写入单个磁盘时,默认值为512就可以了。如果使用RAID阵列或SAN,则必须进行测试以查看默认值还是65536更好。[13(第18页)] 如果手动设置,则该值必须> =用于创建数据文件的块大小,否则将出现以下错误: 消息3272,级别16,状态0,第3行 'C:\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ Backup \ BackupTest.bak'设备的硬件扇区大小为4096,但是block size参数指定不兼容的覆盖值512。使用兼容的块大小重新发出该语句。 BUFFERCOUNT: 默认值[2],[8]: SQL Server 2005及更高版本: (NumberofBackupDevices * …

4
分配更多的CPU和RAM后,SQL Server的性能降低
我们在虚拟Windows 2008 R2服务器上运行SQL Server 2008 R2(10.50.1600)。将CPU从1核升级到4,将RAM从4 gb升级到10 gb后,我们注意到性能会变差。 我看到一些观察结果: 现在,运行时间少于5秒的查询现在耗时200秒以上。 使用sqlservr.exe作为罪魁祸首将CPU固定在100。 具有460万行的表上的select count(*)耗时90秒。 服务器上运行的进程没有更改。唯一的变化是增加了cpu和ram。 其他sql服务器具有静态分页文件,该服务器设置为可单独管理该文件。 有人遇到过这个问题吗? Per sp_BlitzErik,我跑了 EXEC dbo.sp_BlitzFirst @SinceStartup = 1; 给我这些结果。

2
ISO周vs SQL Server周
好的,所以我有一个报告进行了本周与上周的比较,我们的客户注意到他们的数据“很笨拙”。经过进一步调查,我们发现按照ISO标准,它不能正确运行数周。我将此脚本作为测试用例运行。 SET DATEFIRST 1 SELECT DATEPART(WEEK, '3/26/13') , DATEPART(WEEK, '3/27/12') , DATEPART(WEEK, '3/20/12') , DATEPART(WEEK, '1/2/12') SELECT DATEPART(ISO_WEEK, '3/26/13') , DATEPART(ISO_WEEK, '3/27/12') , DATEPART(ISO_WEEK, '3/20/12') , DATEPART(ISO_WEEK, '1/2/12') 运行时,我得到了这些结果。 我认为这很特殊,因此我做了一些进一步的挖掘,发现SQL Server将1月1日视为一年的第一周,而ISO将1月的第一个星期日视为一年的第一周。 然后问题最终变成了两个方面。问题1这是为什么?问题2有什么方法可以更改此设置,因此我不必修改所有代码即可ISO_Week在任何地方使用?

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


7
如何判断是否仍在使用SQL Server数据库?
我们正在寻求停用一个仍具有几个数据库的SQL Server实例。 如何判断用户或Web应用程序仍在使用它们? 我发现一个论坛线程具有一个T-SQL查询,您可以运行该查询来检索上一个查询日期。看来可行,但是我想知道此信息是否足够有效以删除数据库。是吗? 如果您有其他方法也有帮助。
33 sql-server  t-sql 

2
PK索引中的列顺序重要吗?
我有一些具有相同基本结构的非常大的表。每个都有一个RowNumber (bigint)和DataDate (date)列。每天晚上使用SQLBulkImport加载数据,并且从未加载过任何“新”数据-它是历史记录(SQL Standard,不是Enterprise,因此没有分区)。 因为每个数据位都需要绑定到其他系统,并且每个RowNumber/DataDate组合都是唯一的,所以这就是我的主键。 我注意到,由于我在SSMS Table Designer中定义PK的方式,RowNumber第一和DataDate第二列出了。 我还注意到,我的碎片始终非常高,高达〜99%。 现在,由于每个DataDate索引仅出现一次,所以我希望索引器每天都添加到页面中,但是我想知道它是否实际上是RowNumber首先基于索引编制的,因此是否需要转移其他所有内容? Rownumber不是一个标识列,它是一个由外部系统生成的int(很糟糕)。它在每个开始时重置DataDate。 示例数据 RowNumber | DataDate | a | b | c..... 1 |2013-08-01| x | y | z 2 |2013-08-01| x | y | z ... 1 |2013-08-02| x | y | z 2 |2013-08-02| x | y | z …


5
逻辑运算符OR AND,条件和条件在WHERE中
让我们检查以下两个语句: IF (CONDITION 1) OR (CONDITION 2) ... IF (CONDITION 3) AND (CONDITION 4) ... 如果CONDITION 1是TRUE,将CONDITION 2被检查吗? 如果CONDITION 3是FALSE,将CONDITION 4被检查吗? 关于以下条件WHERE:SQL Server引擎会优化WHERE子句中的所有条件吗?程序员是否应该以正确的顺序放置条件,以确保SQL Server优化程序以正确的方式解决该问题? 添加: 感谢Jack的链接,这让T-SQL代码感到惊讶: IF 1/0 = 1 OR 1 = 1 SELECT 'True' AS result ELSE SELECT 'False' AS result IF 1/0 = 1 AND 1 = …

4
如何获取SQL Server表中每行的实际数据大小?
我发现此脚本 sql-server-2005-reaching-table-row-size-limit 似乎返回每个定义的数据类型长度的行大小。我需要一个脚本,该脚本将为我提供表中的所有行,这些行的最大数据大小超过建议的8024(无论MS建议如何)
33 sql-server 

7
复制表格的完整结构
使用某些方法,当您创建表的副本时,会丢失索引,PK,FK等。例如,在SQL Server中,我可以说: select * into dbo.table2 from dbo.table1; 这只是表的简单副本;缺少所有索引/约束。如何复制表结构(不使用备份)? 我主要是希望手动执行此操作,但是如果不可能,我将接受任何解决方案。

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.