数据库管理员

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

1
从不同表中使用ORDER BY选择TOP 1时如何设置索引视图
我正在努力在以下情况下设置索引视图,以便在执行以下查询时不会进行两次聚集索引扫描。每当我为该查询创建索引视图然后使用它时,它似乎都会忽略我在其上放置的任何索引: -- +++ THE QUERY THAT I WANT TO IMPROVE PERFORMANCE-WISE +++ SELECT TOP 1 * FROM dbo.TB_test1 t1 INNER JOIN dbo.TB_test2 t2 ON t1.PK_ID1 = t2.FK_ID1 ORDER BY t1.somethingelse1 ,t2.somethingelse2; GO 表格设置如下: 两张桌子 它们由上面的查询通过内部联接联接 并按上面的查询从第一个表开始的列排序,然后从第二个表开始的列排序;仅选择TOP 1 (在下面的脚本中,还有一些行可以生成测试数据,以防万一有助于重现问题) -- +++ TABLE SETUP +++ CREATE TABLE [dbo].[TB_test1] ( [PK_ID1] [INT] IDENTITY(1, …

3
如何回答为什么突然需要索引或查询的问题
我是具有3年经验的初级DBA。我们的工作是微调查询或建议开发人员应重写特定代码或需要索引。 开发团队经常问的一个简单问题是:“昨天运行良好,突然发生了什么变化?” 我们将被要求检查基础设施方面。对任何问题的第一反应总是似乎是将最大的责任归咎于基础架构,这始终是首先要进行验证的事情。 我们应该如何回答开发团队的“已更改”问题?你们曾经遇到过同样的情况吗?如果是这样,请分享您的经验。


3
在不使用触发器的情况下,在SQL Server中查找触发查询的客户端的身份?
我目前正在使用Change Data Capture(CDC)来跟踪数据更改,并且希望跟踪提交进行了更改的查询的客户端的主机名和IP地址。如果有5个不同的客户端通过相同的用户名登录,则一个客户端将面临跟踪5个客户端中的哪一个引发查询的难题。我发现的其他可能的解决方案包括使用以下命令更改CDC表: ALTER TABLE cdc.schema_table_CT ADD HostName nvarchar(50) NULL DEFAULT(HOST_NAME()) 但是,这将返回在其上触发查询的服务器的主机名,而不是触发该查询的客户端的主机名。 有办法解决这个问题吗?这将有助于记录客户端的主机名或IP地址(或其他唯一身份)。我不想使用触发器,因为它会减慢系统速度,而且CDC还会生成系统表,因此显然不可能在上面设置触发器。

4
是否可以使用SQL Server评估版开发SSIS
我们正在考虑购买SQL Standard Server来实施ETL via SSIS。由于这对我们来说非常昂贵,因此我想在免费版本上测试开发SSIS软件包。由于快速版本未集成SSIS,因此我想在SQL Server 2014 的评估版180过期版本上进行尝试,但找不到任何有关 - Is it possible - Are there limitations. 有人可以帮我吗?
11 sql-server  ssis 

2
仅选择特定列具有不同/多个值的那些记录
以下是我的会员表的示例。电子邮件字段中有一些记录具有多个值。我只想选择具有多个电子邮件值的那些记录: 会员表 ID LASTNAME FIRSTNAME EMAIL 567 Jones Carol carolj@gmail.com 567 Jones Carol caroljones@aol.com 678 Black Ted tedblack@gmail.com 908 Roberts Cole coleroberts@gmail.com 908 Roberts Cole coler@aol.com 908 Roberts Cole colerobersc@hotmail.com 我希望结果是: 567 Jones Carol carolj@gmail.com 567 Jones Carol caroljones@aol.com 908 Roberts Cole coleroberts@gmail.com 908 Roberts Cole coler@aol.com 908 Roberts Cole …
11 select  count  distinct 


1
锁定Postgres以进行UPDATE / INSERT组合
我有两张桌子。一个是日志表;另一个是日志表。另一个实质上包含只能使用一次的优惠券代码。 用户需要能够兑换优惠券,这将在日志表中插入一行并将优惠券标记为已使用(通过将used列更新为true)。 自然,这里存在明显的比赛条件/安全性问题。 在过去的mySQL世界中,我做过类似的事情。在那个世界中,我将全局锁定两个表,在一次只能执行一次的前提下,确保逻辑安全,然后在完成后解锁表。 Postgres中有更好的方法吗?特别是,我担心锁是全局的,但不一定是全局的-我真的只需要确保没有其他人试图输入该特定代码,那么也许行级锁会起作用吗?

1
HADR_SYNC_COMMIT的奇怪情况等待
我们注意到HADR_SYNC_COMMIT在我们的环境中等待的一种有趣模式。我们有三个副本。数据中心中有一个主,一个同步辅助和一个异步辅助,我们刚刚在另一个数据中心(相距约2400英里)中添加了三个ASYNC副本。 从那时起,我们开始注意到HADR_SYNC_COMMIT等待的数量大大增加。当我们查看活动会话时,我们看到一堆COMMIT TRANSACTION查询在SYNC副本上等待 从屏幕截图中,我们可以清楚地看到HADR_SYNC_COMMIT6月29日的等待时间有所增加,我们最终于7月1日中午某个时候在远程数据中心删除了三个异步副本中的“两个”。这大大减少了等待时间。 到目前为止,我们已检查的内容–日志发送队列,重做队列,远程副本上的上次强化时间和上次提交时间。我们在工作时间内连续发生小笔交易,因此在给定的时间戳(介于60KB和1MB之间的任何地方),发送队列非常小。远程副本几乎是同步的,副本上任何单独的lsn的上次提交时间和上次强化时间之间的差异很小。 网络管道为10G,我们将传输缓冲区的大小从256兆修改为2兆,这是在假定网络正在丢弃数据包并重新传输数据的前提下完成的。两种方法似乎都没有太大帮助。 因此,我想知道ASYNC副本与HADR_SYNC_COMMIT等待有什么关系?SYNC副本不应该仅依赖于此等待类型吗,我在这里缺少什么?

5
无法创建文件/var/lib/mysql/user.lower-test
MySQL数据库已经几个月没有问题了。今天,当我使用Synaptic软件包管理器检查可升级软件包时,它附带了各种MySQL组件(-common,-client,-server等)。因此,我决定升级(我忘记记下已安装的版本,但认为它是5.6.21)升级到5.6.25-1-ubuntu2.0。 Error occured: Can't connect to MySQL server on '127.0.0.1' (111) 然后,我发现服务器未运行。在日志文件中,我喜欢以下消息: Can't create file /var/lib/mysql/user.lower-test 我已经花了一个小时左右的时间进行在线搜索,尽管以前已经报告过该问题,但在“更新后”问题的背景下却没有看到它,因此不确定下一步是否可以解决。
11 mysql  linux 

2
SARG基数估计,为什么不进行全扫描?
为什么没有全扫描(在SQL 2008 R2和2012上)? 测试数据: DROP TABLE dbo.TestTable GO CREATE TABLE dbo.TestTable ( TestTableID INT IDENTITY PRIMARY KEY, VeryRandomText VarChar(50), VeryRandomText2 VarChar(50) ) Go Set NoCount ON Declare @i int Set @i = 0 While @i < 10000 Begin Insert Into dbo.TestTable(VeryRandomText, VeryRandomText2) Values(Cast(Rand()*10000000 as VarChar(50)), Cast(Rand()*10000000 as VarChar(50))); Set @i …

2
如果操作是由带有UPDATE CASCADE的FK约束引起的,则FOR EACH STATEMENT触发器多久执行一次?
我了解FOR EACH STATEMENT在执行时,表t上定义的触发器将运行一次UPDATE t ...。 现在,当使用t定义时FOREIGN KEY ... REFERENCES a ... ON UPDATE CASCADE,我更新的N行a,这会导致触发器被调用一次或N次吗? 换句话说,由FK约束级联的表更改更像是单个UPDATE,还是更像一系列UPDATEs?

1
进行大容量插入时,SSDT Schema Compare不起作用
我正在一个大型ETL和DW项目中工作,在该项目中我们将TFS /源代码控制与SSIS和SSDT一起使用。 今天,我发现,当SSIS包对数据库表执行批量插入时,无法对该数据库执行SSDT架构比较。这很不幸,因为我们的某些软件包需要很长时间才能完成。我们希望使用“模式比较”功能来检测对数据库结构的更改,以便将其保存在我们的SSDT项目中,以进行数据库的版本控制。 仔细研究一下,我发现SSDT中的Schema Compare函数执行一个SQL脚本,该脚本OBJECTPROPERTY()在数据库的表上调用系统函数。特别是在我的情况下,OBJECTPROPERTY(<object_id>, N'IsEncrypted')当<object_id>引用当前正在批量插入的表时,对的任何调用似乎都被阻止了。 在Visual Studio中,SSDT架构比较会在一段时间后简单地超时,并声称未检测到差异。 SSDT中是否有解决此问题的方法,还是应该尝试提交MS Connect错误报告? 或者,由于BULK INSERT来自SSIS包,是否有某种方法可以在不锁定OBJECTPROPERTY表调用的情况下进行此插入?编辑:在SSIS OLE DB目标中,我们可以删除“锁定表”中的复选标记,该标记如其所愿,但这在某些情况下可能会损害性能。我对允许SSDT架构比较执行其工作的解决方案更感兴趣,即使某些对象被锁定。
11 sql-server  ssis  ssdt 

6
在没有2005或2008实例的情况下从SQL Server 2000迁移到2012
我遇到了三个旧的数据库,它们都安装在SQL Server 2000上,我需要移至2012年。我认为标准方法是还原到2005或2008实例,更新,重新导出并最终还原到2012年。 很好,除非我们没有2005或2008实例。 是否有任何替代方法或其他方法可能值得尝试? 作为参考,数据库仅包含15-20个表和一些视图,它们看起来非常简单,备份大小仅为100-200MB。

1
在实际安装之前,从可用设置中确定SQL Server版本和版本?
我们正在经历从SQL Server 2008 R2 Enterprise到标准版的降级过程。 为了启动上述活动,我们正在寻找可用的SQL Server标准版。我们找到了一个,但对以下几点感到困惑: 安装文件(由以前的团队成员保存)位于一个名为SQL Server 2008 R2的文件夹中,但是为了在开始安装之前进行交叉检查,我们通过了default.ini文件,该文件显示: SQLSERVER2008 Configuration File [SQLSERVER2008] 这使人怀疑这是否是所需的SQL Server的正确版本。那么,在我们继续尝试安装之前,如果上述方法无法确定版本,还有其他方法吗? 我们是否还可以检查该可用SQL Server的版本,因为在设置上,我们几乎无法确定它是否真的是标准版? 根据我们的安全政策,我们不能简单地下载新媒体。此外,我们无权下载。

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.