数据库管理员

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

4
SQL Server 2005/8查询优化提示
我正在教育一个团队编写更好的SQL Server查询,并且想知道人们对提高性能的最佳提示是什么。 例如,我曾经有一个DBA坚持认为count(*)的性能会比count(1)差(我不知道她是对的还是对最新的查询优化器仍然有效)。 我应该告诉团队尝试哪些简单的事情,并始终使用或避免使用?理想情况下,我正在寻找能够(a)产生合理影响且(b)直截了当的陈述(1-2条陈述)的事物。

3
隐藏从T-SQL选择输出
我正在尝试获取查询执行时间,但我也想隐藏查询输出。我只想要经过的时间-没有输出。 例 DECLARE @Start datetime DECLARE @End datetime SELECT @StartTimeWA=GETDATE() SELECT [id] ,[database_id] ,[proc_name] ,[exec_t] from [DB].[dbo].[STAT] SELECT @End=GETDATE() SELECT DATEDIFF(MS,@Start,@End) AS [Duration] 此刻,我得到查询输出,而我的持续时间却是最短的,这是我想要的唯一结果。我一直无法做到这一点,想知道是否还有其他人遇到过类似的问题?这是我想在T-SQL中执行的操作,而不是Management Studio或类似的操作。 我正在尝试监视运行select语句并向服务器报告的时间。我有一个外部监视器服务器,它将每分钟运行一次,并获取时间(花费的时间),我将随时间使用它来趋势/基线。由于当前查询吐出了选择的结果,并且我的持续时间使它歪斜了,所以我的监控服务器感到困惑。我只想要工期列。我还将对插入内容执行此操作,这将很简单,因为它不需要执行选择。 我试图纯粹在T-SQL中执行此操作。我不想使用DMV,因为我想获取运行查询时所花费的时间(快照),并检查当服务器经历各种负载级别时,时间是否随时间而变化,因为这会给我一个好主意关于查询执行时间是否改变。
13 sql-server  t-sql 


1
启动SQL Server 2017服务时出错。错误代码3417
我的计算机上安装了SQL Server 2017。这是SELECT @@VERSION返回的内容: Microsoft SQL Server 2017(RTM-GDR)(KB4293803)-14.0.2002.14(X64)2018年7月21日版权所有(C)2017 Windows 10 Enterprise 10.0(内部版本17134)上的Microsoft Corporation Enterprise Edition(64位): )` 到昨天为止,一切都很好。突然SQL SERVER Service没跑。当我想手动运行该服务时,显示3417 error。当我检查事件日志时,看到此错误: 数据库'master'的脚本级别升级失败,因为升级步骤'msdb110_upgrade.sql'遇到错误200,状态7,严重性25。这是一个严重的错误情况,可能会干扰常规操作,并且数据库将脱机。如果错误是在“ master”数据库升级期间发生的,它将阻止整个SQL Server实例启动。检查以前的错误日志条目中是否有错误,采取适当的纠正措施,然后重新启动数据库,以便脚本升级步骤运行完成。 经过一番谷歌搜索后,我发现可以使用它/T902 switch并尝试解决问题。但是没有解决方案对我有用。因此,我安装了另一个相同实例SQL SERVER 2017并还原了数据库。现在,新安装的实例具有相同的问题。 可能是什么问题呢? 更新 这是SQL Server的完整错误日志。 2018-09-17 13:06:47.29 spid6s配置选项“显示高级选项”从1更改为1。运行RECONFIGURE语句进行安装。 2018-09-17 13:06:47.29 spid6s配置选项“显示高级选项”从1更改为1。运行RECONFIGURE语句进行安装。 2018-09-17 13:06:47.29 spid6s配置选项'Agent XPs'从1更改为1。运行RECONFIGURE语句进行安装。 2018-09-17 13:06:47.29 spid6s配置选项'Agent XPs'从1更改为1。运行RECONFIGURE语句进行安装。 2018-09-17 13:06:47.29 spid6s创建SSIS文件夹... 2018-09-17 13:06:47.30 …

2
了解varchar(max)8000列以及为什么我可以在其中存储超过8000个字符
通过此 Microsoft文档,+ n定义字符串长度,可以是1到8,000之间的值。max表示最大存储大小为2 ^ 31-1字节(2 GB)。存储大小是输入数据的实际长度+ 2个字节。 请帮助我理解这一点。 varchar的最大字符似乎是8000,这远远少于2GB数据的价值。 我看到varchar(max)特定表的此列中有len(mycolumn)> 100 000的记录。因此,我知道我可以8000在varchar(max)列中获得比字符更多的记录。 问题1:8000角色是如何发挥作用的,我应该从哪里知道呢? 问题2:.net数据读取器对此列的查询是否总是返回包含100000+个字符的完整结果?

2
MariaDB是否支持本机JSON列数据类型?
我不是在谈论动态列,而是在询问本机列JSON数据类型。简而言之,我可以在任何MariaDB版本上运行以下代码吗? CREATE TABLE example (names JSON); 据我所知,它不是,但我仍然不确定,因为有很多话题讨论了对MariaDB的JSON支持已有很长时间了,但是没有人说它最终实现了。 -更新- 刚刚发现,关于JSON数据类型支持,MariaDB Jira仍然存在三个问题,这意味着它尚未实现,对吗? https://jira.mariadb.org/browse/MDEV-9056 https://jira.mariadb.org/browse/MDEV-9144 https://jira.mariadb.org/browse/MDEV-6632
13 mariadb  json 

2
在SQL中使用替换
我有一张桌子,我需要更新一些名称,但我想知道 以下查询: 两者都会一样吗? 查询1 Update mytable Set Name = Replace(Name,'Jeff','Joe') 查询2 Update mytable Set Name = 'Joe' where Name = 'Jeff'
13 sql-server 

1
未使用的NONCLUSTERED INDEX仍然可以提高查询速度吗?
这是一种奇怪的情况,但我希望有人能回答。 在进行一些性能问题排查期间,我们按照的要求将NONCLUSTERED INDEX添加到了表中sp_BlitzIndex。第二天,我们检查了它的使用情况,结果显示0次读取(0次扫描/搜索,0次单例查找),因此我们将其禁用。 在第二分钟,我们收到了抱怨应用程序缓慢(性能问题)的投诉,这是我们在添加INDEX时首先尝试检查并解决的问题。 现在,从理论上讲,这听起来纯属巧合。可证明,可衡量的是,未使用 INDEX 。禁用它不会导致查询性能下降。但它几乎TOO巧合。 题 因此,我的问题就很简单了: 它是在所有可能的,一个非聚集索引,其使用提供的统计(从动态管理视图/ sp_BlitzIndex)显示NO使用,还是已经帮助受影响的表以某种方式查询性能?


1
如何使用COLUMNS_UPDATED检查某些列是否已更新?
我有42列的表格和一个触发器,当其中38列更新时,触发器应该做一些事情。因此,如果其余4列已更改,则需要跳过逻辑。 我可以使用UPDATE()函数并创建一个大IF条件,但更喜欢做一些简短的事情。使用COLUMNS_UPDATED,我可以检查某些列是否全部已更新? 例如,检查第3、5和9列是否已更新: IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1) & 20 = 20) AND (SUBSTRING(COLUMNS_UPDATED(),2,1) & 1 = 1) ) PRINT 'Columns 3, 5 and 9 updated'; 因此,请20为column 3和的5值以及1为column的值,9因为它是在第二个字节的第一位中设置的。如果我将语句更改为OR它,则将检查列3和5或列9是否已更新? 如何OR在一个字节的上下文中应用逻辑?

4
查询以选择联接上的最大值
我有一个用户表: |Username|UserType|Points| |John |A |250 | |Mary |A |150 | |Anna |B |600 | 和级别 |UserType|MinPoints|Level | |A |100 |Bronze | |A |200 |Silver | |A |300 |Gold | |B |500 |Bronze | 我正在寻找一个查询来获取每个用户的级别。类似于以下内容: SELECT * FROM Users U INNER JOIN ( SELECT TOP 1 Level, U.UserName FROM Levels L …

3
我的用户属于哪个广告组登录?
我不确定是否为该问题选择了正确的标题。我真正要追求的是,​​给定单个Windows AD用户,我想找出有权访问此服务器中特定数据库的Windows AD组(登录)的列表。 当我运行以下查询时 select name, principal_id, type, type_desc, default_schema_name, create_date, modify_date, owning_principal_id, sid, is_fixed_role from sys.database_principals 在我的服务器上 Microsoft SQL Server 2008 R2(SP1)-10.50.2500.0(X64)2011年6月17日00:54:03版权所有(c)Windows NT 6.1(Build 7601:Service Pack 1)上的Microsoft Corporation标准版(64位) 我得到以下结果(部分列表): 我需要知道特定登录名的所有权限。此登录名可以通过AD组访问我的服务器/数据库。 1)从上面的列表中,我的登录名属于哪个广告组? 我一直在下面进行此操作,但是我真的很想找出该用户所属的AD组(根据上图可以访问此服务器的列表)的列表。 首先,我以相关用户身份执行 EXECUTE AS LOGIN='mycompany\HThorne' DECLARE @User VARCHAR(20) SELECT @USER = SUBSTRING(SUSER_SNAME(), CHARINDEX('\', SUSER_SNAME()) + 1, LEN(SUSER_SNAME())) 我确保我拥有正确的凭据 …


5
无法加载Oracle 12c Express企业管理器网页
问题总结 当浏览到Oracle 12c EM Express Web界面时,使用以下URL时页面超时: http(s)://主机名:5500 / em http(s)://hostname.domain:5500 / em 当使用包含IP地址或本地主机的url时,页面会加载,但加载速度非常慢(最多5分钟)。 http(s):// ip地址/ em http(s):// localhost / em 使用主机名时,侦听器日志显示错误(多个错误): 03-DEC-2015 11:25:33 * http * (ADDRESS=(PROTOCOL=tcps)(HOST=<ip address>%14)(PORT=52925)) * handoff * http * 12518 TNS-12518: TNS:listener could not hand off client connection TNS-12560: TNS:protocol adapter error 使用IP地址或localhost时,侦听器日志未显示任何错误: 03-DEC-2015 11:23:39 * …

1
为什么UPDLOCK导致SELECT挂起(锁定)?
我在SQL SERVER中有一个选择可以锁定整个表。 这是设置脚本(请确保您不覆盖任何内容) USE [master] GO IF EXISTS(SELECT 1 FROM sys.databases d WHERE d.name = 'LockingTestDB') DROP DATABASE LockingTestDB GO CREATE DATABASE LockingTestDB GO USE [LockingTestDB] GO IF EXISTS(SELECT 1 FROM sys.tables t WHERE t.name = 'LockingTestTable') DROP TABLE LockingTestTable GO CREATE TABLE LockingTestTable ( Id int IDENTITY(1, 1), Name …

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.