Questions tagged «sql-server-2008»

SQL Server 2008(主要版本10.00.xxxx)。请同时用sql-server标记。

4
SSD上的SQL Server数据库-每个表的单独文件有什么优势?
我正在创建一个数据库,其中大约有30个表,每个表包含数千万行,每个表包含一个重要列和一个主键/主键列,以在面对繁重的情况时最大化查询效率更新和插入,并大量使用聚集索引。其中两个表将包含可变长度的文本数据,其中一个表包含数亿行,而其余表仅包含数字数据。 由于我真的想从我可用的硬件(大约64GB的RAM,一个非常快的SSD和16个内核)中挤出所有性能的下降,所以我在考虑允许每个表都有自己的文件,这样无论我要加入2、3、4、5或更多表,每个表将始终使用单独的线程读取,并且每个文件的结构将与表内容紧密对齐,从而有望最大程度地减少碎片并使其更快使SQL Server添加到任何给定表的内容。 一个警告,我被困在SQL Server 2008 R2 Web Edition上。这意味着我不能使用自动水平分区,这将其排除在性能之外。 是否会在每个表中使用一个文件实际上使性能最大化,或者我是否忽略了使之多余的内置SQL Server引擎特性? 其次,如果每个表使用一个文件是有好处的,为什么create table只给我选择将表分配给文件组而不分配给特定逻辑文件的选项?这将需要我为方案中的每个文件创建一个单独的文件组,这向我暗示SQL Server可能没有想到我所假定的优势将来自于我的建议。

5
SQL:如果不是CPU或IO,什么会减慢INSERT的速度?
我们拥有大量写产品的数据库。我们刚刚购买了带有SSD的新服务器,以提供帮助。令我们惊讶的是,插入速度并不比存储速度慢得多的旧机器快。在基准测试期间,我们注意到SQL Server进程显示的IO速率非常低。 例如,我运行了在此页面上找到的脚本,除了我在循环周围添加了BEGIN TRAN和COMMIT之外。充其量我可以看到磁盘使用率达到7Mb / s,而CPU几乎没有达到5%。该服务器已安装64Gb并正在使用10。总运行时间为首次呼叫2分钟15秒,而后续呼叫大约1分钟。数据库正在简单恢复中,并且在测试期间处于空闲状态。我在每次通话之间都放了桌子。 为什么这么简单的脚本这么慢?几乎根本不使用硬件。专用的磁盘基准测试工具和SQLIO均表明SSD可以正常运行,并且读写速度高达500Mb / s。我知道随机写入比顺序写入要慢,但是我希望像这样的简单插入到没有聚簇索引的表中会更快。 最终,我们的情况要复杂得多,但是我觉得我需要先了解一个简单的案例。简而言之,我们的应用程序删除旧数据,然后使用SqlBulkCopy将新数据复制到临时表中,执行一些过滤,最后根据情况使用MERGE和/或INSERT INTO将数据复制到最终表中。 ->编辑1:我遵循了马丁·史密斯(Martin Smith)链接的过程,得到以下结果: [Wait Type] [Wait Count] [Total Wait (ms)] [T. Resource Wait (ms)] [T. Signal Wait (ms)] NETWORK_IO 5008 46735 46587 148 LOGBUFFER 901 5994 5977 17 PAGELATCH_UP 40 866 865 1 SOS_SCHEDULER_YIELD 53279 219 121 98 WRITELOG 5 …

4
轻松显示两个表或查询之间不同的行
假设您有两个应该具有/返回相同数据的不同表/查询。您要验证这一点。像下面的示例一样,比较每个列的简单方法是显示每个表中所有不匹配的行吗?假设表中有30列,其中许多是可空的。 当没有PK或每个PK可能有重复项时,仅在PK列上进行联接是不够的,并且必须使用30个可以正确处理NULL的联接条件以及讨厌的WHERE条件进行FULL JOIN排除匹配的行。 通常,当我针对未清理或未完全理解的数据编写新查询时,问题最严重,并且逻辑上可用的PK的可能性极低。我用两种不同的方法来解决问题,然后比较它们的结果,这些差异突出了我不知道的数据中的特殊情况。 结果需要如下所示: Which Col1 Col2 Col3 ... Col30 ------ ------ ------ ------ ------ TableA Cat 27 86 -- mismatch TableB Cat 27 105 -- mismatch TableB Cat 27 87 -- mismatch 2 TableA Cat 128 92 -- no corresponding row TableB Lizard 83 NULL -- no corresponding …

6
如何防止索引重组期间事务日志变满?
我们有多台机器,我们已将事务日志的大小预分配为50gb。我尝试重新整理的表格大小为55-60 GB,但会不断增加。我要重组的主要原因是要回收空间和任何性能收益,因为这是额外的好处。 该表的碎片级别为30-35%。在其中一些计算机上,我收到“事务日志已满”错误,并且重组失败。事务日志大小达到48gb。有什么好方法可以解决这个问题?我们没有打开自动增量功能,我不愿意这样做。 我可以将日志大小增加到一个更大的值,但是随着将来表大小的增加,该值可能会不够。如果我要平等地增加日志大小,它也会破坏进行重组以回收空间的目的。关于如何有效应对这一问题的任何想法?由于无法接受数据丢失,因此无法使用批量模式。

3
收缩SQL Server日志文件如何影响性能?
我有一个SQL Server 2008数据库,该数据库的数据文件大小约为2GB,但日志文件超过8GB。在2008年之前的数据库中,我可以使用“备份日志”和该TRUNCATE_ONLY选项,但是在2008年及以后的数据库中不再可用。 我确实有一个脚本会截断日志文件: USE [MyDatabase] GO ALTER DATABASE [MyDatabase] SET RECOVERY SIMPLE WITH NO_WAIT DBCC shrinkfile('MyDatabase_log', 1) ALTER DATABASE [MyDatabase] SET RECOVERY FULL WITH NO_WAIT GO 这会完全截断日志文件,但是我的问题是:这会影响性能吗? 我每天执行两次完整备份,因此就数据前滚而言,确实不需要日志。



4
为什么我不能像我想象的那样在T-SQL中使用变量?
请原谅,我是一名开发人员,已经转移到SQL领域。我以为我可以通过添加变量来改进一些SQL,但它的功能不像我预期的那样。有人可以告诉我为什么这行不通吗?我不想变通,我想知道为什么此方法不起作用的原因,就像我想像的那样,因为我确信这是有充分的理由的,但是目前还没有跳出来。 DECLARE @DatabaseName varchar(150) SET @DatabaseName = 'MyAmazingDatabaseName' CREATE DATABASE @DatabaseName GO USE @DatabaseName GO

7
将每日时间表分组为[开始日期;结束日期]与星期几的间隔
我需要在两个系统之间转换数据。 First系统将日程表存储为简单的日期列表。计划中包含的每个日期都是一行。日期顺序可能会有各种差异(周末,公共假期和较长的停顿时间,日程表中可能不包括一周中的某些天)。根本没有差距,甚至可以包括周末。日程安排可能长达2年。通常是几个星期。 这是一个跨越两周(不包括周末)的时间表的简单示例(以下脚本中有更复杂的示例): +----+------------+------------+---------+--------+ | ID | ContractID | dt | dowChar | dowInt | +----+------------+------------+---------+--------+ | 10 | 1 | 2016-05-02 | Mon | 2 | | 11 | 1 | 2016-05-03 | Tue | 3 | | 12 | 1 | 2016-05-04 | Wed | 4 | | …


2
从SQL 2005 [SQL_Latin1_General_CP1_CI_AS]迁移到2008-我将通过使用“向后兼容性”来丢失任何功能
我们正在从SQL 2005 [实例和数据库的归类为SQL_Latin1_General_CP1_CI_AS]到SQL 2008 [默认为Latin1_General_CI_AS]。 我完成了SQL 2008 R2的安装,并使用了默认Latin1_General_CI_AS排序规则,并且数据库还原仍在进行中SQL_Latin1_General_CP1_CI_AS。发生了例外的问题- Latin1_General_CI_AS数据库在 其中的#temp表所在的位置 SQL_Latin1_General_CP1_CI_AS,这就是我现在所在的位置-我现在需要有关陷阱的建议。 在安装SQL 2008 R2中,我对安装使用的选项'SQL Collation, used for backwards compatibility',我必须选择相同的排序规则为2005数据库的选项:SQL_Latin1_General_CP1_CI_AS。 这将使我在#temp表上没有问题,但是有陷阱吗? 如果不使用SQL 2008的“当前”排序规则,是否会丢失任何类型的功能或特性? 当我们从2008年迁移到SQL 2012时(例如,在2年内)怎么办?那我有问题吗? 我会在某个时候被迫去Latin1_General_CI_AS吗? 我读到一些DBA的脚本完成了完整数据库的行,然后使用新的排序规则将插入脚本运行到数据库中-我对此感到非常害怕和警惕-您会建议这样做吗?

3
动态定义维度范围
每当我决定构建一个多维数据集时,我都会遇到一个问题,但是我还没有找到克服它的方法。 问题是如何允许用户自动定义一系列事物,而无需在维度中对其进行硬编码。我将在一个示例中解释我的问题。 我有一个名为客户的表: 这是表中的数据: 我想以数据透视样式显示数据,并在如下所示的定义范围内将薪金和年龄分组: 我编写了此脚本并定义了范围: SELECT [CustId] ,[CustName] ,[Age] ,[Salary] ,[SalaryRange] = case when cast(salary as float) <= 500 then '0 - 500' when cast(salary as float) between 501 and 1000 then '501 - 1000' when cast(salary as float) between 1001 and 2000 then '1001 - 2000' when cast(salary …

4
使用* tables *作为表值参数(TVP)
MS SQL 2008支持TVP:一项有用的功能,用于将数据批量上传到存储的过程中进行处理。 除了创建用户定义的类型外,还可以利用现有的表定义吗?例如,是否可以创建具有以下签名的存储过程? CREATE PROCEDURE usp_InsertProductionLocation @TVP **LocationTable** READONLY 该文档似乎表明这是不可能的。 样本代码 /* Sample code from: http://msdn.microsoft.com/en-us/library/bb510489.aspx */ USE AdventureWorks2008R2; GO /* Create a table type. */ CREATE TYPE LocationTableType AS TABLE ( LocationName VARCHAR(50) , CostRate INT ); GO /* Create a procedure to receive data for the table-valued …

1
是否可以为数据库创建别名或同义词?
是否可以创建数据库别名或同义词?我希望能够做的是将NewDatabaseName别名化为OldDatabaseName,以防止不得不重写大量代码。 背景故事:我遇到一个客户,遇到一个可笑的自我引发的问题。他们有一个带有SQL Server后端的第三方应用程序。用户已经使用Visual Basic针对该数据库编写了自定义报告,所有数据库连接信息都硬编码在他们的程序中。 最近,第三方软件重命名了他们的数据库。现在,所有报告EXE都失败了。 哦,他们也没有很多源代码。 我忍住了笑声,说我会做什么。

4
SQL Server最大内存不限制对RAM的使用
我希望您对此提供意见。我有一个sql server 2008r2 Ent。埃德 具有16个内核和64GB RAM的64位。截至20111014,有一个完全修补的SQL Server实例。 最大ram设置为60000MB。在线几天后,根据任务管理器,免费ram的数量为0。 如果我将最大RAM更改为低于53GB,几天后它将稳定下来并有一些可用RAM。 是sql进程根据任务管理器分配ram。我该如何解决真正的问题?不用说,我已经做了很多测试,但是还没有按照我的喜好解决。当可用的内存降低到0时,我们不会得到典型的内存短缺。 更新1: 受到此页面上与RAM相关的另一个问题的启发,网址为/dba//a/7062/2744。我用这两个来查看RAM的用途。 SELECT TOP ( 10 ) [type] AS [Memory Clerk Type] , SUM(single_pages_kb) AS [SPA Mem, Kb] FROM sys.dm_os_memory_clerks GROUP BY [type] ORDER BY SUM(single_pages_kb) DESC OPTION ( RECOMPILE ) ; SELECT DB_NAME(database_id) AS [Database Name] , COUNT(*) * …

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.