Questions tagged «sql-server»

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

3
SQL Server数据库分片-如何处理公用数据/非分片数据
我们有一个非常大型的企业级数据库。作为我们业务模型的一部分,所有Web用户每个月都在同一时间访问我们的Web服务器,这反过来又会破坏我们的sql框。业务量非常大,并且随着公司规模的增长,流量还会继续增加。已执行sql proc优化,并且硬件已经扩展到很高的水平。 我们正在寻求对数据库进行分片,以确保我们能够处理公司的增长和未来的负载。 我们已决定应分拆哪些特定数据。它是我们数据库的一个子集,利用率很高。 但是,我的问题是关于通用/通用的非分片数据。这样的数据示例可能是一个库存表(例如),也可能是雇员表,用户表等。 我看到两个选项来处理此通用/通用数据: 1)设计1-将通用/通用数据放置在外部数据库中。所有写入将在此处发生。然后,该数据将被复制到每个分片中,从而允许每个分片在t-sql proc中读取此数据并内部联接至此数据。 2)设计2-为每个分片提供所有常见/通用数据的自己的副本。让每个分片在本地写入这些表,并利用sql合并复制来更新/同步所有其他分片上的数据。 对设计#1的担忧 1)事务性问题:例如,如果您必须先在一个分片中写入或更新数据,然后再在1个存储的proc中写入/更新一个通用/通用表,那么您将无法再轻松地做到这一点。现在,数据存在于单独的sql实例和数据库上。您可能需要让MS DTS来查看是否可以将这些写操作包装到事务中,因为它们位于单独的数据库中。在这里,性能是一个问题,可能会对写入分片和公共数据的proc进行重写。 2)失去参照完整性。不可能做到跨数据库引用完整性。 3)重新编码系统的大部分区域,以便它知道将公共数据写入新的通用数据库,但从分片中读取公共数据。 4)。增加数据库旅行。像上面的#1一样,当您遇到必须更新分片数据和公用数据的情况时,由于数据现在位于单独的数据库中,因此您将进行多次往返以完成此操作。这里有些网络延迟,但是我不像上面的3一样担心这个问题。 对设计2的担忧 在设计2中,每个分片都拥有自己的所有通用/通用数据实例。这意味着加入或更新公共数据的所有代码将像今天一样继续工作/运行。开发团队几乎不需要进行任何编码/重写。但是,此设计完全依赖合并复制来使所有分片之间的数据保持同步。dbas非常熟练,并且非常担心合并复制可能无法处理此问题,并且合并复制失败,因此从该失败中恢复并不好,并且可能会对我们造成负面影响。 我很想知道是否有人采用了第二种设计方案。我也很好奇我是否忽略了我没有看到的第三或第四设计方案。 先感谢您。
10 sql-server 

2
截断/大插入后是否应该重建索引?
我有一个存储过程,它会在插入新数据(基于其他表中的数据,计算等)之前,截断每个表中各有约175万行的某些表。 基本轮廓非常简单: 截断表 在大约75,000的“批次”中插入175万行。 我想知道是否应该在此过程中的任何时候显式重建索引?例如 截断表 ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西] 插入175万行 也许 ALTER INDEX ALL ON xxx DISABLE 截断表 插入175万行 ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西] 非常感谢任何帮助...不是DBA-知道DB很好的开发人员会更准确!

2
选择/插入死锁
此实例承载SharePoint 2007数据库(SP)。我们一直在针对SP内容数据库中一个频繁使用的表遇到许多SELECT / INSERT死锁。我缩小了涉及的资源,这两个过程都需要对非聚集索引进行锁定。INSERT在SELECT资源上需要IX锁,而SELECT在INSERT资源上需要S锁。死锁图描述了三个资源:1。SELECT中的两个(生产者/消费者并行线程)和2.)INSERT。我附上了死锁图供您查看。因为这是Microsoft代码和表结构,所以我们无法进行任何更改。 但是,我已经在MSFT SP站点上阅读了他们建议将MAXD​​OP实例级别的配置选项设置为1。由于此实例在许多其他数据库/应用程序之间共享,因此不能禁用此设置。 因此,我决定尝试防止这些SELECT语句并行执行。我知道这不是解决方案,而是临时的修改,以帮助进行故障排除。因此,这样做后,我将“并行计算的成本阈值”从我们的标准25提高到了40,即使工作负载没有改变(SELECT / INSERT频繁发生),死锁也消失了。我的问题是为什么? SPID 356 INSERT在属于非聚集索引的页面上具有IX锁 SPID 690 SELECT执行ID 0在属于同一非聚集索引的页面上具有S锁 现在 SPID 356希望在SPID 690资源上获得IX锁,但由于SPID 356被SPID 690执行ID 0阻止而无法获得IX锁 SPID 690执行ID 1希望在SPID 356资源上获得S锁,但由于SPID 690执行ID无法获得它SPID 356阻止了1,现在我们陷入僵局。 执行计划可以在我的SkyDrive上找到 完整的死锁详细信息可以在这里找到 如果有人可以帮助我理解为什么我会非常感激。 EventReceivers表。 id uniqueidentifier否16 名称nvarchar否512 SiteId uniqueidentifier否16 WebId uniqueidentifier否16 HostId uniqueidentifier否16 HostType int否4 ItemId int否4 DirName nvarchar否512 LeafName nvarchar否256 …

3
用户无法在SSMS中以非默认模式查看表
我在VIEW DEFINITION为一个用户的架构级别适当设置权限时遇到问题。我已经创建了架构TestSchema并添加了一些表。用户目前有权限设置为访问和修改表(SELECT,UPDATE,DELETE通过等)dbo_datareader和dbo_datawriter角色。但是,他们看不到SSMS对象资源管理器中的任何表。 我尝试授予查看定义的权限: grant view definition on SCHEMA :: [TestSchema] to [User] 那没用。我尝试设置表级权限: grant view definition on [TestSchema].[NewTable] to [User] 那也没有用。然后,我尝试了一项总括性赠款: grant view definition to [User] 那确实奏效了;他们现在可以看到TestSchema以及他们不应该访问的其他模式。 我的目标是允许用户查看给定架构中的所有表。我该怎么做?如果默认情况下我应该能够执行此操作,那么我应该查看哪些权限以查找为什么不能这样做?

2
此“映射”表是否需要单独的Id列?
我有Producers和的表Products,两者的形式均为: Id -int,主键 Name -nvarchar 一个生产者可以携带多个产品,所以我要创建一个表ProducerDetails,该表将具有: ProducerId -int,外键 Producers.Id ProductId -int,外键 Products.Id 然后我开始质疑自己,所以我想问专家。Id在ProducerDetails表中增加一个附加列(int,主键)会更好吗?还是那是不必要的? 如果这有任何区别,我正在使用SQL-Server 2008 R2。 编辑 -我相信这些表之间的关系将是多对多的,抱歉,我没有说清楚。一个生产者可以携带多种类型的产品,并且同一产品可以由多个不同的生产者生产。 如果这个问题过于简单,我很抱歉,参照完整性/数据库设计不是我的强项(尽管我正在努力改善这一点)。

1
将加密的数据库还原到另一台服务器
我正在使用在SQLServer 2008上运行的产品。可以理解的是,提供该产品的公司不提供SQLServer支持。安装产品时,我指定了密码来加密数据库。我想运行该产品的另一个副本,以便在另一台服务器上进行测试。我已将数据库还原到另一台服务器,并将产品安装在另一台服务器上。安装后,我提供了相同的密码,然后从主服务器还原了备份。但是我收到错误消息: System.Data.SqlClient.SqlException: An error occurred during decryption. 从产品。我可以使用SQLServer Management Studio访问表。 我已经试过了: 在第一台服务器上: CREATE CERTIFICATE cert1 WITH SUBJECT = 'Certificate for my stuff' BACKUP CERTIFICATE cert1 TO FILE = 'd:\backup\cert1.dat' WITH PRIVATE KEY ( ENCRYPTION BY PASSWORD = 'mypassword', FILE = 'd:\backup\cert1_privatekey.dat' ) 在第二台服务器上: CREATE MASTER KEY ENCRYPTION BY PASSWORD …

1
SQL Server死锁图-表,页或行锁定?
如果死锁图中的锁是表,页面或行级别,有什么方法可以解密?我从图表中获得了我需要的所有信息,包括隔离级别(2),但我也确实想知道这一点。 感谢任何能提供帮助的人!

4
T-SQL-遍历表直到满足条件的最有效方法是什么
在中进行了编程任务T-SQL。 任务: 人们想进入电梯,每个人都有一定的体重。 排队等候的人的顺序由立柱转弯确定。 电梯的最大容量为<= 1000磅。 返回在电梯沉重之前能够进入电梯的最后一个人的名字! 返回类型应为表格 问题: 解决此问题的最有效方法是什么?如果循环正确,是否还有改进的空间? 我使用了一个循环和#临时表,这是我的解决方案: set rowcount 0 -- THE SOURCE TABLE "LINE" HAS THE SAME SCHEMA AS #RESULT AND #TEMP use Northwind go declare @sum int declare @curr int set @sum = 0 declare @id int IF OBJECT_ID('tempdb..#temp','u') IS NOT NULL DROP TABLE …
10 sql-server  t-sql 

4
在LIKE运算子中选择多个值
我在下面给出了一个SQL查询,我想使用like运算符选择多个值。 我的查询正确吗? SELECT top 1 employee_id, employee_ident, utc_dt, rx_dt FROM employee INNER JOIN employee_mdata_history ON employee.ident=employee_mdata_history.employee_ident WHERE employee_id like 'emp1%' , 'emp3%' ORDER BY rx_dt desc 如果没有,谁能纠正我? 我的表格包含大量以'emp1'和开头的数据'emp3'。我可以基于前3个“ emp1”和前2个“ emp3”过滤结果rx_dt吗?


2
SQL Server 2016高空闲CPU和查询速度极慢
我安装了大约10天的WinServer2012R2和SQL Server Express 2016进行测试。我是这台机器上的唯一用户。从SQL Server 2005还原的.bak数据库约为250MB,不会出现任何问题。重新启动计算机后,进程“ SQL Server NT-64位”使用0%CPU。 在几分钟或几小时后,通过“ SQL Server NT-64位”的SSMS CPU使用情况进行的一些简单查询(无更新/插入!)突然跳到〜15%并保持在那里,即使处于空闲状态也是如此。从那时起,通常不到一秒钟的查询突然需要2分钟。在实际查询期间,CPU使用率不会增加。在这种状态下,服务器实际上变得不可用。 仅连接SQL Server Profiler会花费30秒以上的时间。除了我自己的查询外,我只看到很少的来自SQLServerCEIP / SQLTELEMETRY的查询,每分钟约3个。 重新启动SQL Server无法解决它。CPU使用率跃升至约15%。即使数小时后,SQL Server也无法恢复。仅重新引导整个计算机即可解决此问题。 由于这是“开箱即用”的安装,因此只有一个小的数据库,几乎没有查询,只有我作为用户,并且可能没有锁,许多有关常规SQL-Server性能问题的文章都谈到了很多不希望做的事情。在这里真的不适用。似乎SQL Server 仅希望专注于某些内部任务。 这是一个具有2GB RAM和2GHz双Xeon的虚拟机。我也有VS2016,而且速度非常快。没有防病毒软件,甚至没有Windows Defender。在这里已经晚了。我明天将尝试sp_whoisactive。我真的很想知道SQL-Server在那里做什么...在具有1 GB的以前的机器上,相同的数据库在SQLServer2005下运行了10年没有问题... 我不是SQL-Profiler专家。我应该从哪里开始寻找?

2
存储可能是多种类型的值的最佳方法
我想以更直接,更笼统的方式再问一个问题: 如何创建一个表来存储可能是多种不同类型的值? 就我而言,这些值提供有关事件的诊断。例如:事件发生->存储来自多个PLC的读数,其中包含有关事件的相关信息。PLC可以监视任何类型的数据。 我能想到的一些例子: 为每种可能的类型创建一列,并创建另一列以指示要使用的列 例如:列:IntVal,StrVal,BoolVal,类型。值:null,null,True,“ BOOL” 将值存储为varchar

3
为什么.bak文件大小随着SQL Server上的每个连续备份而增加/增加?
我在SQL Server 2012 Express上运行一个简单的数据库。 就在今天,当我备份数据库时,.bak文件大小增加了一倍,是几分钟前上次备份的大小。今天,我已经进行了几次备份(通过SQL Server Management Studio->备份类型:完整),并且每次备份.bak文件都会加倍。 在SQL Server Mgmt Studio中,当我右键单击数据库->“报告”->“备份和还原事件”->展开“成功备份操作”时: 此处的报告显示,最新备份大小记录为55MB,但是当我转到实际.bak文件时,它为260MB。今天.bak,彼此备份的大小也记录为55MB,而其相应文件的大小则是原来的几倍(并且随着每次备份操作的增加而增加)。 可能出什么问题了?自从发生这种情况以来,我还没有对数据库进行任何更改。

1
如何为不平等查询建立索引?
我有基于浮点列的值排除数据的查询 select * from My_Table where my_Float_column != 0 and my_Float_column is not null 如果可以,我不想为浮点型索引。执行计划是否足够聪明,可以使用如下所示的过滤索引(在这里我仅索引0和null值)以提高性能? CREATE NONCLUSTERED INDEX IX_My_Table_Float_Filtered ON My_Table (my_Float_column) WHERE my_Float_column = 0 or my_Float_column is null

1
检测到SQLHANDLE的可能的无限重新编译
我一直在sql错误日志中发现奇怪的错误消息: Bocss:每小时都会发生同样的僵局–需要调查 此外,按照以下示例,错误日志中还列出了许多其他SPID的重新编译内容: 2015年9月4日14:30:10,spid64,未知,为SQLHANDLE检测到可能的无限重新编译0x0200000059631A288882589E0C54B76404CAE1B97E08D368000000000000000000000000000000000000000000 PlanHandle 0x0600040059631A2860A62B654100000001000000000000000000000000000000000000600最后一次补偿是10:30/04/04:10:04/04 /结尾,spid150,未知,已检测到SQLHANDLE 0x02000000EF886F018C4E0B163812B8B20150FE8FC7E6A06A000000000000000000000000000000000000000000 PlanHandle 0x06000400EF886F01901A816E0600000001000000000000000000000000000000000000000000000000000000的可能无限重新编译,起始偏移量998Uncompute 09,20 09:09结束,偏移量2020是:0909结束时的偏移量2020:20,09:09结束,偏移量2030:0检测到可能无限的重新编译为SQLHANDLE 0x0200000057C4C632D9052275CFF2B683B80F29501EE91D730000000000000000000000000000000000000000 PlanHandle 0x0600040057C4C63200EAC2BE3000000001000000000000000000000000000000000000000000000000000000起始偏移1064结束偏移2652是2. 2015年9月4日14最后重新编译原因:30:09,spid163,未知,是为SQLHANDLE 0x02000000E7C7BF0E5D70DE55759C7842860272AD474D69AB0000000000000000000000000000000000000000 PlanHandle探测到一个可能无限的重新编译0x06000400E7C7BF0EF0EB68A52C00000001000000000000000000000000000000000000000000000000000000000000起始偏移量1028终止偏移量2580.上次重新编译的原因是2。 是什么原因造成的? 看来我已经没有计划在缓存中了。 按照这篇文章的建议 http://www.sqlservercentral.com/Forums/Topic1479420-146-1.aspx 然后作为一项安全措施禁用了全文目录,这没有什么区别,因此我完全回滚了更改(删除了新对象等)。这也没有什么不同,最终似乎唯一阻止它的是重启SQL实例,这立即解决了问题。 这样也可以解决我的问题,但是,我仍然首先要找出是什么原因造成了这种混乱?

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.