数据库管理员

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

1
为什么对分区视图执行删除会导致聚集索引插入?
我有一个分区视图,具有下面的插入触发器(可怜的芒分区)。当我执行DELETE时,我得到以下查询计划: delete from factproductprice where pricedate = '20170725' 在视图上触发: ALTER TRIGGER [dbo].[factProductPriceDelete] ON [dbo].[FactProductPrice] INSTEAD OF DELETE AS BEGIN IF @@ROWCOUNT = 0 RETURN; DECLARE @PriceDate DATE SELECT @PriceDate = CAST(PriceDate AS DATE) FROM DELETED IF @PriceDate BETWEEN '20140101' AND '20141231' BEGIN DELETE FROM dbo.FactProductPrice2014 WHERE ProductId IN (SELECT ProductId …

1
全文:创建多个全文索引(服务器挂起)后,许多FT_MASTER_MERGE以SUSPENDED状态等待
我们在SQL Server 2014上进行了测试,当时我们有10个数据库,每个数据库中有100个不同的架构,每个架构中有10个小表(〜50行)(总共有10K个表),并在所有这些表上创建了全文本索引所有这些数据库中的表。 几分钟后,我们发现SQL Server停止接受任何连接(ADMIN:.连接除外)。如果重新启动服务器,则可以连接,但有时会再次挂起。经过一些调查,我们发现它是由消耗所有工作线程引起的dm_os_tasks,dm_os_waiting_tasks并向我们​​显示了状态中有很多FT_MASTER_MERGE等待SUSPENDED。我们用谷歌搜索“全文正在等待主合并操作”,但没有找到更多有关它的实际信息。 我们尝试了不同的全文目录配置:每个DB一个目录,每个模式一个目录,每个索引一个目录。无论如何,服务器将所有这些挂起的任务挂起。 什么是等待的根本原因,如何解决/减轻这种等待? 在如此大量的表上启用全文的推荐方法是什么?


2
在过去4小时内重新创建了大多数查询计划
我的SQL Server数据库性能出现问题。我已经找到了此工具sp_BlitzCache。命令执行后,我得到以下语句: 您在过去24小时内创建了92.00%的计划,在过去4小时内创建了92.00%的计划。 在确定问题的同时(使用SQL Server Profiler,我检查了StmtRecompile事件的发生),但我只能找到一些经常被重建的全文本搜索查询。但是,全文搜索查询仅占所有查询的5%。 您有什么建议可能导致其余87%的计划重新生效吗? 我有SQL Server 2012(版本11.0.6567.0)。 编辑:我添加了我的性能计数器 +---------------------------+--------------------------------+--------------+ | object_name | counter_name | cntr_value | +---------------------------+--------------------------------+--------------+ | SQLServer:Buffer Manager | Background writer pages/sec | 0 | | SQLServer:Buffer Manager | Buffer cache hit ratio | 28436 | | SQLServer:Buffer Manager | Buffer cache hit ratio base …

2
使用SQL Server TDE编写远程备份时,网络通信是否已加密?
他们确实说没有“愚蠢的问题”之类的东西,所以去了: 我了解SQL Server 透明数据加密(TDE)会加密静态数据,以便在有人闯入您的存储并窃取这些文件时对您的数据库文件(.mdf)和备份文件(.bak)进行加密。我还了解到,从磁盘读取数据时,数据将被解密,因此不会在内存中(移动中)对数据进行加密。因此,运行远程查询(从SensitiveData中选择*)的用户请求的数据在通过网络传输时不会被加密,因此很容易被拦截。 因此,假设以上所有方法都是正确的,这是我的愚蠢问题:如果我的SQL Server实例在计算机A上并且我的TDE数据库备份被写到远程计算机B上的存储中,那么备份操作数据是否在从计算机A传输时被加密了?将计算机A写入计算机B的磁盘上?我认为必须这样做(因为我想加密操作首先在计算机A上进行),但是在任何Microsoft文档或博客中都找不到对此的确认。同样,在还原操作过程中-是否有人在计算机B处拦截从磁盘上传输的数据以在计算机A上还原数据库-他们会发现运动中的数据已加密吗?

3
在一列上区分并返回TOP行
您如何查询三个最大的唯一客户Purchase_Cost? 我想在上应用DISTINCT唯一Customer_Name,但是下面的查询在所有三列上应用了非重复。我应该如何修改查询以获得所需的输出? SELECT DISTINCT TOP 3 customer_name, order_no, Purchase_Cost FROM PurchaseTable ORDER BY Purchase_Cost

1
无法截断事务日志log_reuse_wait_desc-AVAILABILITY_REPLICA
今天早上,我被我们的数据库之一的事务日志已满警报惊醒。该服务器是Alwayson群集,也是事务复制订阅服务器。我检查了log_reuse_wait_desc,它显示了logbackup。某人四天前不小心禁用了日志备份作业,我重新启用了日志备份作业,日志被清除。从凌晨4点开始,我想我将在那天早上晚些时候去上班,因为日志已经增长到400GB,所以请顺便去。 上午10点-我在办公室,我在缩小之前检查日志使用率,大约是16%。我很惊讶,检查显示复制的log_reuse_wait_desc。我很困惑,因为这是一个复制订户。然后,我们看到该数据库已启用CDC,并认为这可能是原因,因此禁用了CDC,现在log_reuse_wait_desc显示了AVAILABILITY_REPLICA。 同时,日志使用量仍在稳定增长,目前为17%。我检查了Alwayson仪表板,并检查了已发送和重做队列,两者实际上都为零。我不确定为什么日志重用显示为AVAILABILITY_REPLICA并且无法清除日志。 知道为什么会这样吗?

5
内联视图和WITH子句之间的区别?
内联视图使您可以从子查询中进行选择,就好像它是另一个表一样: SELECT * FROM /* Selecting from a query instead of table */ ( SELECT c1 FROM t1 WHERE c1 > 0 ) a WHERE a.c1 < 50; 我已经看到了使用不同术语来指代的内容:内联视图,WITH子句,CTE和派生表。在我看来,对于同一件事,它们是不同的供应商特定语法。 这是一个错误的假设吗?两者之间在技术/性能上有什么区别吗?

4
我可以在SET TRANSACTION ISOLATION LEVEL SERIALIZABLE之后添加提交的读取吗?
在存储过程中,我具有以下内容:(sql server 2008) SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION getStuff BEGIN TRY /* some selects, updates, etc, etc. */ .... COMMIT TRANSACTION getStuff END TRY BEGIN CATCH ... END CATCH 由于这是基于事务的,因此我认为其余的数据库连接将不受SERIALIZABLE的影响。 我是否需要隐式设置隔离级别以在提交后读取提交?这会对我的应用程序服务器和数据库服务器之间的其他连接产生不利影响吗?

3
是否实际使用了关键字“ ALIAS”?
根据PostgreSQL 7.1到9.1(目前不支持),ALIAS至少在SQL-99中被列为保留字。更高版本未显示它-表示已将其作为保留字删除。旧的PostgreSQL文档确实说过“关键字的存在并不表示功能的存在。” 给表或列加别名时我见过AS,但从没见过ALIAS。 SQL关键字在哪里(或曾经在哪里)ALIAS?它是曾经使用过还是仅保留供将来使用?

4
通过MySQL获取半径拉链时出现问题
我有一个邮政编码表,其中包括每个邮政编码的中心纬度,经度。我用它来获取从任意点到给定英里半径内的邮政编码列表。 在我看来,仅仅是因为拉链的中心点不在给定的半径内,并不意味着拉链本身不在半径内。 我用自己的超高级艺术技巧来说明这一点: 绿色条纹斑点表示邮政编码A,B和C。 红色污点是每个邮政编码的地理中心 紫红色的点是目标位置,并且.. 块状蓝色圆圈距离目标位置1英里半径 如果我查询距离粉红色污迹1英里半径内的所有邮政编码,则将返回邮政编码B和C,因为邮政编码A的中心点不在1英里半径内,即使粉红色污迹本身显然在邮政编码A中。 SELECT *, p.distance_unit * DEGREES(ACOS(COS(RADIANS(p.latpoint)) * COS(RADIANS(z.y)) * COS(RADIANS(p.longpoint) - RADIANS(z.x)) + SIN(RADIANS(p.latpoint)) * SIN(RADIANS(z.y)))) AS dist FROM standard_zip AS z JOIN ( /* these are the query parameters */ SELECT $lat AS latpoint, $lng AS longpoint, $miles AS radius, 69 AS …

1
我应该对链接SQL Server有什么大的限制?
我们的产品基于Microsoft SQL Server。当前,我们正在使用三个数据库,并且始终将它们部署在一个SQL Server实例上。 这三个数据库是OLTP,OLAP和审计。OLAP数据库使用跨数据库查询,具有来自OLTP和审计的有关EOD的大量入站数据。 问题 如果我们要将这三个数据库部署到单个物理服务器内的三个单独的Standard Edition 实例上,并使用SQL Server的链接服务器功能将它们绑定在一起: 对应用程序代码的透明度如何?我应该期待多少变化? 到OLAP的入站数据总计为5万至10万行,每个EOD负载为200-500MB。我应该期望多少性能下降? 我还应该期待其他哪些重大限制? 背景 目前,我们正在为潜在的第一个客户提供500多个并发用户。 我们正在起草服务器规范,其中包括64个内核和256GB RAM。为了使SQL Server能够利用所有这些丰富的资源,客户端必须购买Enterprise Edition,而对于SQL Server 2016,Enterprise Edition仅在基于每核的许可中可用。 我们担心光是许可成本(64 x 7400美元)就会使他们失望。因此,我正在考虑将数据库分为Standard Edition的三个实例,并将它们链接在一起,希望链接功能对应用程序代码是透明的。

2
列族的意义是什么?
我已经看到像RocksDB这样的NoSQL数据库系统提供了称为列族的功能。我相信我理解该概念所指的含义,但是使用它们的实际(实用)好处是什么?我认为它们至少可以改善某些情况下的查询性能,或者至少可以改善键值整体的空间局部性?据我了解,这似乎并不会影响数据库访问的实际语义。它是否正确?有什么我想念的吗?
9 nosql 

1
COALESCE现在可燃了吗?
我的一位开发人员争辩说COALESCE(column, default value) = default value现在可以精打细算了。那正确吗? 我进行了以下测试,并认为这暗示着COALESCE不可持久。 USE tempdb; SELECT @@VERSION; -- Microsoft SQL Server 2016 (RTM-CU3-GDR) (KB3194717) - 13.0.2186.6 (X64) Oct 31 2016 18:27:32 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows 10 Pro 6.3 <X64> (Build 14393: ) (Hypervisor) CREATE TABLE Test ( ID int primary key …

1
整个表的查询中未使用的分区索引的统计信息
在分区上进行联接与在整个表上进行联接时,以下联接具有非常不同的行估计: CREATE TABLE m_data.ga_session ( session_id BIGINT NOT NULL, visitor_id BIGINT NOT NULL, transaction_id TEXT, timestamp TIMESTAMP WITH TIME ZONE NOT NULL, day_id INTEGER NOT NULL, [...] device_category TEXT NOT NULL, [...] operating_system TEXT ); 对于所有分区: CREATE TABLE IF NOT EXISTS m_data.ga_session_20170127 ( CHECK (day_id = 20170127) ) INHERITS (m_data.ga_session); …

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.