数据库管理员

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

2
SQL Server tempdb在RAM磁盘上?
我们的供应商应用程序数据库非常占用TempDB。 该服务器是具有40个内核和768GB RAM的虚拟服务器(VMWare),运行SQL 2012 Enterprise SP3。 包括TempDB在内的所有数据库都位于SAN的1层SSD上。我们有10个tempdb数据文件,每个文件已预先增长到1GB,并且它们从未自动增长。与70GB日志文件相同。跟踪标志1117和1118已设置。 sys.dm_io_virtual_file_stats显示过去一个月在tempdb数据和日志文件上读取/写入的数据超过50 TB,累积io_stall为250小时或10天。 在过去的两年中,我们已经调整了供应商的代码和SP。 现在,我们正在考虑将tempdb文件放置在RAM驱动器上,因为我们有大量的内存。由于tempdb在重新引导服务器时被破坏/重新创建,因此它是放置在易失性内存中的理想选择,该易失性内存在重新引导服务器时也会被清除。 我已经在较低的环境中对此进行了测试,它可以缩短查询时间,但可以增加CPU使用率,因为CPU可以做更多的工作,而不是等待慢的tempdb驱动器。 还有其他人将tempdb放在高oltp生产系统的RAM上吗?有什么主要的不利条件吗?是否有任何供应商专门选择或避免?

2
为什么嵌套循环联接仅支持左联接?
在Craig Freedman的博客Nested Loops Join中,他解释了为什么嵌套循环联接不能支持正确的外部联接: 问题在于,我们多次扫描内部表–对外部联接的每一行扫描一次。在这些多次扫描中,我们可能多次遇到相同的内部行。在什么时候我们可以得出结论,特定的内部行尚未或将不会加入? 有人可以用一种非常简单且具有教育意义的方式来解释这一点吗? 这是否意味着循环从外部表(R1)开始并扫描内部表(R2)? 我了解,对于R1不与相连的值,R2应将其替换为,NULL这样结果集将变为(NULL, R2)。对我来说,似乎无法返回不加入R2时返回值R1,因为它不知道R2要返回哪个值。但这不是它的解释方式。还是? SQL Server会在事实上优化(经常替换)RIGHT JOIN用LEFT JOIN,但问题是解释为什么它在技术上是不可能的NESTED LOOPS JOIN使用/支持RIGHT JOIN逻辑。

2
如何将HTML代码读取为XML并获得类似sql中示例的输出?
我将HTML代码存储在数据库中,我想将其读取为XML。 我的代码: http://rextester.com/RMEHO89992 这是我拥有的HTML代码的示例: <div> <section> <h4> <span> A </span> </h4> <ul> <li> <span> Ab</span> AD <span> AC </span> </li> <li> <span> Ag</span> <span> AL </span> </li> </ul> <h4> <span> B </span> </h4> <ul> <li> <span> Bb</span> BD <span> BC </span> </li> <li> <span> Bg</span> <span> BL </span> </li> </ul> …
11 sql-server  t-sql  xml 

2
将动态SQL(数据透视查询)转换为xml输出时,为什么日期的第一位转换为unicode?
我使用的是来自Bluefeet的出色示例/dba//a/25818/113298,以创建数据透视并将其转换为xml数据。 声明参数 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); 接下来是具有大量代码的CTE,将CTE的结果放入临时DB(与示例中相同) SELECT B.[StayDate] -- this is a date dd-mm-yyyy , B.[Guid] INTO #tempDates FROM BaseSelection B 生成col(与示例相同) SELECT @cols = STUFF((SELECT distinct ',' +QUOTENAME(convert(char(10), [StayDate] , 120)) FROM #tempDates FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,''); 结果集是我应该期望的 set @query = 'SELECT …
11 sql-server  xml  pivot 

2
SQL Server-NTEXT列和字符串处理
我有一张桌子,有一NTEXT列叫comments。我有第二个字符串,我们称它为anothercomment(a varchar),需要comments在单词后面的给定字符串中放置它UPDATEHERE。 强制转换为nvarchar(max)截断comments字符串,所以我不能使用CHARINDEX()(Msg 8152, Level 16, State 10, Line 2 String or binary data would be truncated.)。的datalength()类似符号。我曾经检查过是否有几千个大于8000个字符的列。 我要实现的示例(尽管字符串更长): 评论 - This is a test UPDATEHERE This is the end of the test 另一个评论- . This is inserted. 结果字符串- This is a test UPDATEHERE. This is inserted. This is the end …

3
是否可以根据SQL Server版本选择RAISERROR或THROW?
现在是我的代码: BEGIN TRY INSERT INTO TABLE (F1,F2,F3) VALUES ('1','2','3') END TRY BEGIN CATCH ;THROW END CATCH 除非它在装有SQL 2008的计算机上运行,​​否则效果很好。我想让CATCH块对SQL版本进行检查,如果THROW等于或高于2012,则运行THROW,如果它等于或高于2012,则运行RAISERROR。语法错误,我想知道是否有可能。即使像这样简单的事情也对我不起作用。 BEGIN CATCH IF ((SELECT SERVERPROPERTY('productversion')) >= 11) ;THROW END CATCH 任何建议表示赞赏。

1
检查约束以强制执行###。###。####模式匹配
我希望有一个检查约束,可以对多部分代码强制执行此正则表达式模式: ^\d{3}\.\d{3}\.\d{4}$ ...三个数字,一个句号,三个数字,一个句号,四个数字 我是否需要创建CLR函数来实施模式匹配,并且可以在DDL中引用CLR函数吗? 有没有一种方法可以使用另一种方式来实施模式LIKE?

4
可以参与SET操作的最大局部变量数是多少?
我有一个包含业务逻辑的存储过程。在它里面,我有大约1609个变量(不要问我为什么,这就是引擎的工作原理)。我尝试将SET一个变量转换为所有其他变量的串联值。结果是在创建过程中出现错误: 消息8631,级别17,状态1,过程XXX,行YYY内部错误:已达到服务器堆栈限制。请在查询中寻找潜在的深层嵌套,并尝试简化它。 我发现该错误是由于我需要在SET操作中使用的变量数量引起的。我可以将作业一分为二来执行。 我的问题是这方面有限制吗?我检查了一下,但是没有找到。 我们检查了此KB中描述的错误,但这不是我们的情况。我们CASE在代码内不使用任何表达式。我们使用该临时变量准备必须使用CLR函数替换的值的列表。我们将SQL Server更新为SP3 CU6(最新),但是仍然遇到该错误。

1
SQL Server存储过程命名
我们已经开始将存储过程命名为[16_TestStoredProc]。命名这样的存储过程有什么含义吗? 我不会解释为什么我们要这样做。我不是对此有任何疑问,但可能有任何影响。

1
在这种情况下将使用哪个索引?
SQL Server 2014标准版 我需要找到特定月份往返特定城市的航班数量。例如 select count(*) from flights where flightTo_AirportCode = 'aaaa' and flightFrom_Airportcode = 'bbbb' and flightdate < '2016-04-01' and flightdate > '2016-02-28' ; 表模式如下。 我正在尝试评估索引模型A或索引模型B(如下)是否更可取(建立索引需要花费数小时,并且磁盘空间一次只能存在一个,因此我想在跳之前先进行研究)。 根据我的经验,任何一个索引都可以。我对吗? create index [modelA] on flights (flightTo_AirportCode, flightFrom_AirportCode, flightDate) create index [modelB] on flights (flightDate, flightTo_AirportCode, flightFrom_AirportCode) (或者,更好的是,我可以使用二进制索引或高级机制来解决这个问题吗?) CREATE TABLE [dbo].[flights]( [flightId] [uniqueidentifier] …

2
奇数流聚合行为
查询: declare @X xml = ' <item ID = "0"/> <item ID = "1"/> <item/> <item/>'; select I.X.value('@ID', 'int') from @X.nodes('/item') as I(X); 结果: ----------- 0 1 NULL NULL 执行计划: 顶部分支将XML切成四行,底部分支获取该属性的值ID。 让我感到奇怪的是,从Stream Aggregate运算符返回的行数。来自筛选器的2行是XML中ID第一个和第二个item节点的属性。流聚合返回四行,每一输入行一个,有效地将“内部联接”转换为“外部联接”。 这是否也是Stream Aggregate在其他情况下所做的事情,还是在进行XML查询时发生的奇怪事情? 我在查询计划的XML版本中看不到任何暗示,此Stream Aggregate的行为应与我之前注意到的任何其他Stream Aggregate有所不同。

10
如何在标准SQL或T-SQL中生成1、2、3、3、2、1、1、2、3、3、2、1…系列?
给定两个数字n和m,我想生成一系列的表格 1, 2, ..., (n-1), n, n, (n-1), ... 2, 1 并重复m一次。 例如,对于n = 3和m = 4,我需要以下24个数字组成的序列: 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1 ---------------- ---------------- ---------------- ---------------- 我知道如何通过两种方法之一在PostgreSQL中实现此结果: 使用以下查询,该查询使用该generate_series函数,以及一些技巧以确保顺序正确: WITH parameters (n, …

2
PostgreSQL:将表作为函数中的参数传递
我TYPE在PostgreSQL中发现。我有TABLE TYPE一些表必须尊重(接口)。例如: CREATE TYPE dataset AS( ChannelId INTEGER ,GranulityIdIn INTEGER ,GranulityId INTEGER ,TimeValue TIMESTAMP ,FloatValue FLOAT ,Status BIGINT ,QualityCodeId INTEGER ,DataArray FLOAT[] ,DataCount BIGINT ,Performance FLOAT ,StepCount INTEGER ,TableRegClass regclass ,Tags TEXT[] ,WeightedMean FLOAT ,MeanData FLOAT ,StdData FLOAT ,MinData FLOAT ,MaxData FLOAT ,MedianData FLOAT ,Percentiles FLOAT[] ); 我可以使用以下模板创建表格: CREATE TABLE …

4
SQL Server无法在简单双射上使用索引
这是另一个查询优化器难题。 也许我只是高估了查询优化器,或者我错过了一些东西,所以我把它放在了那儿。 我有一张简单的桌子 CREATE TABLE [dbo].[MyEntities]( [Id] [uniqueidentifier] NOT NULL, [Number] [int] NOT NULL, CONSTRAINT [PK_dbo.MyEntities] PRIMARY KEY CLUSTERED ([Id]) ) CREATE NONCLUSTERED INDEX [IX_Number] ON [dbo].[MyEntities] ([Number]) 带有一个索引和几千行,Number均匀分布在值0、1和2中。 现在这个查询: SELECT * FROM (SELECT [Extent1].[Number] AS [Number], CASE WHEN (0 = [Extent1].[Number]) THEN 'one' WHEN (1 = [Extent1].[Number]) THEN 'two' …

2
如何为可以具有不同属性集的实体类型建模?
在用Users和Items之间的一对多(1:M)关系重新创建数据库时遇到了一些麻烦。 是的,这很简单。但是,每个项目都属于某个类别(例如Car,Boat或Plane),并且每个Category具有特定数量的属性,例如: Car 结构体: +----+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | +----+--------------+--------------+ Boat 结构体: +----+--------------+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | Attribute #3 | +----+--------------+--------------+--------------+ Plane 结构体: +----+--------------+--------------+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | Attribute #3 | Attribute #4 | +----+--------------+--------------+--------------+--------------+ …

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.