数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

3
DMV sys.dm_exec_requests中的total_elapsed_time是否完全不正确?
我正在运行SQL Server 2012,并尝试将一些查询放在一起以使用DMV进行监视。但是,当查看DMV 中的total_elapsed_time字段时sys.dm_exec_requests,数字看起来相去甚远。这是一个例子: SELECT session_id, RunTime = CURRENT_TIMESTAMP, start_time, total_elapsed_time FROM sys.dm_exec_requests WHERE session_id = 284; session_id RunTime start_time total_elapsed_time 284 2016-04-07 16:14:03.690 2016-04-07 16:08:14.587 1419976 根据我的计算*,经过时间应该在349,103左右,而不是1,419,976。相差四分之一。 *根据当前时间与start_time之间的差(以毫秒为单位),即 SELECT DATEDIFF(MILLISECOND, '2016-04-07T16:08:14.587', '2016-04-07T16:14:03.690'); 这是服务器信息: SELECT @@VERSION; Microsoft SQL Server 2012 - 11.0.5592.0 (X64) Apr 17 2015 15:18:46 Copyright (c) Microsoft …

4
对应用程序的每个用户使用不同的数据库帐户是否曾经是一种好习惯?
我曾经使用的应用程序是基于服务器的,并为多个用户使用一个数据库帐户,而应用程序代码控制用户或单用户的工作。 是否有任何成功的复杂业务应用程序,每个人都需要他们自己的数据库帐户,并且依靠数据库服务器来执行关于应允许和不允许每个用户做什么的策略规则? 我正在考虑这样的应用程序,其中多个人可以在一个数据库中贡献信息,并且可以访问其他人存储的信息-例如组织中需要访问客户记录的同事。 还有这种类型的设置的名称吗?
13 security 

2
是否存在确定多个文件文件组中包含分配单元的确切文件的方法?
我希望能够详细了解哪些数据库文件包含用于数据库中各种HoBT(对齐和不对齐)的分配单元。 在我们开始为每个文件组创建多个数据文件之前,我一直使用的查询(请参见下文)对我很有帮助,而我只能弄清楚如何获得与文件组级别一样的粒度。 select SchemaName = sh.name, TableName = t.name, IndexName = i.name, PartitionNumber = p.partition_number, IndexID = i.index_id, IndexDataspaceID = i.data_space_id, AllocUnitDataspaceID = au.data_space_id, PartitionRows = p.rows from sys.allocation_units au join sys.partitions p on au.container_id = p.partition_id join sys.indexes i on i.object_id = p.object_id and i.index_id = p.index_id join sys.tables …

2
批量插入时间差异很大
因此,我有一个简单的批量插入过程,可以从暂存表中获取数据并将其移入我们的数据集市。 该过程是一个简单的数据流任务,默认设置为“每批行数”,选项为“ tablock”和“无检查约束”。 桌子很大。587,162,986,数据大小为201GB,索引空间为49GB。该表的聚集索引为。 CREATE CLUSTERED INDEX ImageData ON dbo.ImageData ( DOC_ID ASC, ACCT_NUM ASC, MasterID ASC ) 主键是: ALTER TABLE dbo.ImageData ADD CONSTRAINT ImageData PRIMARY KEY NONCLUSTERED ( ImageID ASC, DT_CRTE_DOC ASC ) 现在我们遇到了一个问题,即BULK INSERT通过SSIS的运行速度非常慢。1小时插入一百万行。填充表的查询已经排序,并且要填充的查询需要不到一分钟的时间才能运行。 当进程运行时,我可以看到查询正在等待BULK插入,这需要5到20秒的时间,并且显示的等待类型为PAGEIOLATCH_EX。该过程一次只能执行INSERT大约一千行。 昨天,在针对我的UAT环境测试此过程时,我遇到了同样的问题。我运行了几次该过程,试图确定此缓慢插入的根本原因是什么。然后突然之间不到5分钟就开始运行了。所以我又运行了几次,结果都一样。等待5秒或更长时间的散装插入物数量也从数百下降到大约4。 现在,这令人困惑,因为这并不像我们的活动有所减少。 CPU持续时间很短。 速度较慢的时间似乎较少等待磁盘。 实际上,磁盘延迟会在5分钟以内运行该进程的时间内增加。 在此过程运行不佳的时期,IO更低。 我已经检查过了,并且文件没有增长,因为文件仅占70%。日志文件仍有50%可用。数据库处于简单恢复模式。DB仅具有一个文件组,但分布在4个文件中。 所以我想知道的是:为什么我看到那些大批量插入的等待时间如此之长。B:发生了什么魔术使它运行得更快? 边注。今天又像废话一样运行。 UPDATE,当前已分区。但是,这样做的方法充其量只是愚蠢的。 CREATE PARTITION SCHEME …

1
如何无缝升级AWS RDS postgres数据库的主要版本?
今天早上,我参与了在AWS RDS上升级PostgreSQL数据库的工作。我们想从9.3.3版升级到9.4.4版。我们已经在登台数据库上“测试”了升级,但是登台数据库小得多,并且不使用多可用区。事实证明,该测试还远远不够。 我们的生产数据库使用多可用区。过去,我们已经进行了次要版本升级,在这种情况下,RDS将首先升级备用数据库,然后将其升级为主数据库。因此,在故障转移期间仅发生的停机时间约为60秒。 我们假设主要版本升级会发生同样的情况,但是哦,我们错了。 有关设置的一些详细信息: db.m3.large 预置IOPS(SSD) 300 GB的存储空间,其中已使用139 GB 我们的RDS OS升级非常出色,我们想批量进行此升级,以最大程度地减少停机时间 以下是我们执行升级时记录的RDS事件: 数据库CPU在大约08:44到10:27之间已用尽。RDS似乎大部分时间都被RDS占用了,以进行升级前和升级后快照。 该AWS文档不警告这样的反响,尽管从阅读他们很显然,我们在处理一个明显的缺陷是,我们没有创建的副本生产的多AZ建立数据库,并尝试将其升级为试运行 总的来说,这非常令人沮丧,因为RDS很少提供给我们有关它在做什么以及可能需要花费多长时间的信息。(再次,进行试运行会有所帮助...) 除此之外,我们想从这次事件中学习,所以这里是我们的问题: 在RDS上进行主要版本升级时,这种情况正常吗? 如果我们想在将来以最少的停机时间进行主要版本升级,我们将如何处理?是否有某种巧妙的方式使用复制来使复制更加无缝?

2
如何获取SQL插入和/或更新以不锁定MS SQL Server上的整个表
数据库工作非常新手,因此,感谢您对一个基本问题的耐心等待。我在本地计算机上运行SQL Server 2014,并且有一个小表和一个基本的客户端应用程序来测试不同的方法。我在INSERT INTO和UPDATE语句中都得到了一个表锁。客户端是具有以下代码的ASP.NET应用程序: OleDbConnection cn = new OleDbConnection("Provider=SQLNCLI11; server=localhost\\SQLEXPRESS; Database=<my db>; user id=<my uid>; password=<my pwd>"); cn.Open(); OleDbTransaction tn = cn.BeginTransaction(); OleDbCommand cmd = new OleDbCommand("INSERT INTO LAYOUTSv2 (LAYOUTS_name_t, LAYOUTS_enabled_b, LAYOUTS_data_m) VALUES ('name', '-1', 'data')", cn, tn); cmd.ExecuteNonQuery(); cmd.CommandText = "SELECT SCOPE_IDENTITY()"; int newkey = Decimal.ToInt32((decimal)cmd.ExecuteScalar()); Console.WriteLine("Created index " …

4
当XACT_ABORT设置为ON时,在什么情况下可以从CATCH块内部提交事务?
我一直在阅读有关TRY...CATCH和的MSDN XACT_STATE。 它具有以下示例,该示例XACT_STATE在构造CATCH块中TRY…CATCH用于确定是提交还是回退事务: USE AdventureWorks2012; GO -- SET XACT_ABORT ON will render the transaction uncommittable -- when the constraint violation occurs. SET XACT_ABORT ON; BEGIN TRY BEGIN TRANSACTION; -- A FOREIGN KEY constraint exists on this table. This -- statement will generate a constraint violation error. DELETE FROM Production.Product WHERE …

2
Mongodb突然出现高连接数/队列,数据库停止响应
问题 我们在mongodb设置中遇到一个奇怪的问题。有时我们会遇到高连接和高队列的高峰,如果让队列和连接增加,mongodb进程将停止响应。我们需要使用带有htop的sigkill重新启动实例。 似乎存在系统限制/ mongodb配置阻止mongodb运行,​​因为硬件资源还可以。此问题的版本单独发生,然后在生产服务器上设置副本。前面的细节。 关于软件环境 这是一个独立的mongodb实例(不是分片或副本集),它在专用计算机上运行,​​并由其他计算机查询。我正在Debian 7.7下使用mongodb-linux-x86_64-2.6.12。 查询mongo的机器使用的是Django == 1.7.4,Mongoengine = 0.10.1和pymongo == 2.8,nginx 1.6.2和gunicorn 19.1.1。 在Django settings.py文件上,我使用以下几行连接到数据库: from mongoengine import connect connect( MONGO_DB, username = MONGO_USER, password = MONGO_PWD, host = MONGO_HOST, port = MONGO_PORT ) MMS统计 正如您从MMS服务的以下img中可以看到的那样,我们在连接和队列上达到峰值: 发生这种情况时,我们的mongodb进程将完全冻结。我们必须使用SIGKILL重新启动mongodb,这确实很糟糕。 在图像中有3个冻结事件。 如img所示,当发生这种情况时,我们在非映射虚拟内存上也会出现一个峰值。 另外,我们在第二和第三次冻结附近的Btree图表上发现了增加。 我们已经检查了日志,但是没有可疑的查询,操作人员也没有猛增,似乎没有比平常更多的查询了。 这是关于同一错误但在另一天/时间的另一个屏幕截图: 在所有情况下,数据库上的锁都没有显着增加,它有一个峰值,但没有达到4%: OpCounter降为零,似乎每个操作都进入mongodb queque,因此数据库创建新连接以尝试执行新请求,所有连接也都进入队列。 机器资源 关于硬件,该计算机是具有4个Intel …

1
为什么SQL Server拒绝使用Fullscan以外的任何内容来更新这些统计信息?
我注意到在每日数据仓库构建中,运行时间相对较长(超过20分钟)的自动更新统计信息操作。涉及的表是 CREATE TABLE [dbo].[factWebAnalytics]( [WebAnalyticsId] [bigint] IDENTITY(1,1) NOT NULL, [MarketKey] [int] NOT NULL CONSTRAINT [DF_factWebAnalytics_MarketKey] DEFAULT ((-1)), /*Other columns removed*/ CONSTRAINT [PK_factWebAnalytics] PRIMARY KEY CLUSTERED ( [MarketKey] ASC, [WebAnalyticsId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MarketKeyPS]([MarketKey]) ) ON …

2
为什么执行差异备份时我的批处理请求增加
我已经开始对2012 SQL Server上的各种活动进行一些长期跟踪,并且发现增量备份期间批处理请求的增加。 可以说,正常情况下,每天我们大约有10-20个批处理请求,但是在我们的差异备份运行期间,它跳到了每秒100-130个。 我知道这不是很多,但令我好奇的是它增加了10倍。 不知道您可能需要什么信息来帮助解决此问题。

1
我如何尽快切碎此扩展事件XML?
我在SQL Server 2008 R2中创建了扩展事件会话。会话运行,并在事件发生时收集事件,完全符合您的期望。 如果在事件相对较少时切碎xml,则性能可以接受。当我有成千上万个事件时,将xml切碎是永远的。 我知道自己做错了事,只是对XML引擎的内部知识不足,无法理解。 这是我的扩展事件会话的定义: IF EXISTS ( SELECT 1 FROM sys.server_event_sessions dxs WHERE dxs.name = 'queries' ) BEGIN IF EXISTS ( SELECT 1 FROM sys.dm_xe_sessions dxs WHERE dxs.name = 'queries' ) BEGIN ALTER EVENT SESSION queries ON SERVER STATE = STOP; END DROP EVENT SESSION queries ON …

2
我计算机名称中的连字符导致T-SQL错误
我是开发人员,而不是DBA(恐怕正在显示)。我试图在我的家用计算机(名为John-PC)上运行带有SQL Server 2014 Express的Report Builder 3.0,但无法运行我的报告。 我无意中创建的用户/登录组合user = John-PC和login = John-PC\John。当我尝试通过以下方式删除条目时: Drop Login John-PC\John 我收到一个错误: '-'附近的语法不正确。 我认为问题是计算机名称中的连字符。 有没有一种方法可以解决语法错误? 还有另一种更改或删除用户的方法(我尝试从中删除,sys.server_principals但收到一个我无法进行临时更改的错误)。 我可以以某种方式为Report Builder提供一个新的用户名/登录名吗? 如果以上都不是,我可以John_PC将计算机的名称更改为还是会导致很多其他我无法想象的问题?

2
如何实现基于集合的算法/ UDF
我有一个算法,需要对具有800K行和38列的表中的每一行运行。该算法在VBA中实现,并且使用来自某些列的值来操纵其他列来进行一堆数学运算。 我目前正在使用Excel(ADO)来查询SQL,并将VBA与客户端游标一起使用来逐行循环应用该算法。它可以工作,但是需要7个小时才能运行。 VBA代码非常复杂,以至于将其重新编码为T-SQL会花费很多工作。 我已经阅读了有关CLR集成和UDF作为可能路线的信息。我还考虑过将VBA代码放在SSIS脚本任务中,以使其更接近数据库,但可以肯定存在解决此类性能问题的专家方法。 理想情况下,我将能够以基于并行集的方式针对尽可能多的行(所有?)运行算法。 任何帮助都很大程度上取决于如何在此类问题上获得最佳性能。 - 编辑 感谢您的评论,我正在使用MS SQL 2014 Enterprise,这里有更多详细信息: 该算法在时间序列数据中找到特征模式。该算法中的函数执行多项式平滑,加窗,并根据输入标准查找感兴趣的区域,返回十二个值和一些布尔结果。 我的问题更多是关于方法的问题,而不是实际的算法:如果我想一次在多个行上实现并行计算,我有什么选择。 我看到建议重新编码为T-SQL,这是很多工作,但是可能的,但是算法开发人员在VBA中工作,并且更改频繁,因此我需要与T-SQL版本保持同步并重新验证每个更改。 T-SQL是实现基于集合的函数的唯一方法吗?

2
如何使Brent Ozar的sp_BlitzIndex在Azure上运行?
我从Brent Ozar的网站下载了SQL Server急救包。当我尝试通过Microsoft Sql Server Management Studio对我的主数据库运行sp_BlitzIndex脚本时,以Azure数据库服务器级管理员身份登录时,出现以下错误: 消息262,级别14,状态18,过程sp_BlitzIndex,第18行在数据库'master'中拒绝了CREATE PROCEDURE权限。 我在要测试的数据库实例上成功创建了该过程。当我执行该过程时,出现错误提示: 消息50000,级别16,状态1,行1265无效的对象名称“ mydatabase.sys.partitions”。 接下来,我尝试变得聪明,直接对master数据库运行存储过程代码,而不创建存储过程,并收到以下错误: 消息50000,级别15,状态1,行1267在此版本的SQL Server中,不支持在“ mydatabase.sys.indexes”中引用数据库和/或服务器名称。 我没有足够的信心开始玩弄大约2700行索引启发式逻辑的内部工作。是否有一种快速简便的方法来使该存储过程在Azure SQL数据库上正常工作,还是应该在其他地方寻找索引分析工具/存储过程?

2
这两个SQL Server回滚有何不同?
在SQL Server 2008 R2中,这两个回滚有何不同: 运行ALTER语句几分钟,然后单击“取消执行”。完全回滚需要几分钟。 运行相同的ALTER语句,但是请确保该LDF文件的大小不足以使其成功完成。一旦达到LDF限制并且不允许“自动增长”,查询执行将立即停止(或发生回滚),并显示以下错误消息: The statement has been terminated. Msg 9002, Level 17, State 4, Line 1 The transaction log for database 'SampleDB' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases 这两个方面在以下几点上有何不同? 为什么第二个“回滚”是瞬时的?我不确定是否可以将其称为回滚。我的猜测是,事务日志是在执行过程中编写的,一旦它意识到没有足够的空间来完全完成任务,它就会以一些“结束”消息停止,而不会提交。 第一次回滚需要很多时间(回滚是单线程的)会发生什么? 2.1。SQL Server会返回并撤消LDF文件中的输入吗? 2.2。该LDF文件大小在回滚结束变得更小(从DBCC …

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.