数据库管理员

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

4
SQL Server 2012的FIRST()和LAST()版本是什么?
我有一个带value栏的桌子。我要计算最后一行减去第一行,如下所示: id value 1 10 2 45 3 65 4 95 . . . . . . 500 200 我想获得 200 - 10 = 190 我试着然而,在SQL Server 2012中使用下面的命令,LAST并且FIRST不工作。 SELECT LAST(Value) - FIRST(Value) FROM Counter; SQL Server中此命令的语法是什么?

1
无论我尝试什么,都无法使SQLCMD工作
无论我做什么,我都无法使SQLCMD正常工作。我试图运行一个大小为200mb +的脚本,并且无法从sql服务器应用程序运行,因此我需要通过SQLCMD进行此操作,但是,每当我尝试登录或运行该脚本时,它都会立即关闭。 我已经通过msdn跟随了sqlcmd实用程序。 我试图通过可信任的命令SQLCMD -EI getooo它: Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes Provider: Could not open a connection to SQL Server [2]. . Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login timeout expired. Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : A …

4
解析YAML配置文件时出错:yaml-cpp
我在MongoDB Shell版本中使用以下命令(Windows计算机):3.0.7: mongod --config "G:\NodeApps\mongod.cfg" --install mongod.cfg文件的内容如下: systemLog: destination: file path:"G:\NodeApps\data\log" storage: dbPath:"G:\NodeApps\data" 得到以下错误: Error parsing YAML config file: yaml-cpp: error at line 4, column 8: illegal map value try 'mongod --help' for more information 类似的问题没有解决方案。 我已经尝试过的: 我正在使用空格(而不是制表符) 我试图通过将文件保存为ASCII格式来尝试,正如其中一篇文章中提到的那样,不应将Mongod配置文件保存为非ACSII格式。甚至在UTF-8中也没有。 请帮我解决一下这个。

1
sys.dm_exec_sessions中的“读取”列实际上指示什么?
这似乎是一个非常基本的问题,确实应该如此。但是,作为科学方法的忠实拥护者,我喜欢创建一个假设,然后对其进行检验以查看我是否正确。在这种情况下,我试图更好地理解的输出sys.dm_exec_sessions,更具体地说,是单列“读取”的输出。 SQL Server联机丛书相当干脆地将其指定为: 在此会话期间,由该会话中的请求执行的读取次数。不可为空。 一个人可能会认为这将指示自会话开始以来从磁盘读取的页数,以满足该会话发出的请求。这是我以为我会检验的假设。 该logical_reads表中的列定义为: 在会话上执行的逻辑读取数。不可为空。 从使用SQL Server的经验来看,我相信此列反映了从磁盘和内存读取的页面数。换句话说,页面的总数曾经由会话,无论这些页面驻留阅读。具有两个提供相似信息的独立列的差异或价值主张似乎是,对于特定会话,人们可以理解从磁盘读取的页面reads与从缓冲区高速缓存读取的页面的比率logical_reads。 在测试平台上,我创建了一个新数据库,创建了一个表,该表具有已知数量的数据页,然后在新会话中读取该表。然后,我sys.dm_exec_sessions查看了reads和logical_reads专栏对会议的看法。在这一点上,我对结果感到困惑。也许有人可以为我阐明这一点。 测试装备: USE master; IF EXISTS (SELECT 1 FROM sys.databases d WHERE d.name = 'TestReads') BEGIN ALTER DATABASE TestReads SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE TestReads; END GO CREATE DATABASE TestReads; GO ALTER DATABASE TestReads SET RECOVERY SIMPLE; BACKUP DATABASE …

1
是否可以在PostgreSQL的日志活动中排除特定用户?
我需要监视数据库中用户的活动。我在中设置了以下参数postgresql.conf: log_min_duration_statement = 0 log_connections = on log_disconnections = on log_line_prefix = '%t %a %d %h %u |' 但是,我意识到大多数日志文件都充满了postgres用户执行的语句,我为维护任务编写的脚本使用了这些语句:重新计算实例化视图,pg_dump,pg_restore,将视图提取为列表文件等,其结果是每日的大小超过12 Mb的日志文件。 有没有办法从日志中排除特定用户的活动?
10 postgresql  log 

3
应用程序查询空表
我公司使用的应用程序存在很大的性能问题。我正在研究数据库本身存在许多问题,但是许多问题纯粹与应用程序有关。 在调查中,我发现有数百万个查询命中SQL Server数据库,查询空表。我们大约有300个空表,其中一些表每分钟最多查询100-200次。这些表与我们的业务领域无关,实际上是原始应用程序的一部分,当我的公司与他们签约为我们提供软件解决方案时,供应商并未删除这些原始应用程序。 除了我们怀疑应用程序错误日志中充斥着与此问题相关的错误以外,供应商还向我们保证,应用程序或数据库服务器不会对性能或稳定性造成影响。错误日志泛滥成灾,以至于我们看不到价值超过2分钟的错误来进行诊断。 这些查询的实际成本显然会在CPU周期等方面很低。但是,谁能说出对SQL Server和应用程序有什么影响呢?我怀疑发送请求,确认请求,处理请求,返回请求以及确认应用程序已收到请求的实际机制本身会对性能产生影响。 我们将SQL Server 2008 R2,Oracle Weblogic 11g用于该应用程序。 @ Frisbee-长话短说,我创建了一个包含querytext的表,该表命中了应用程序数据库中的空表,然后对其查询以获取我知道为空的所有表名,并得到了很长的列表。考虑到该应用通常在上午8点至下午6点使用,因此在30天的正常运行时间中,执行次数最高的是270万次执行,因此这些数字更多地集中在运营时间。多个表,多个查询,可能有些通过联接释放,有些则没有。命中率最高(当时为270万)是从一个带有where子句,无联接的空表中进行的简单选择。我希望连接到空表的较大查询可能包括对链接表的更新,但是我将检查并尽快更新此问题。 更新:有1000个查询,执行计数在1043-4622614之间(超过2.5个月)。我将不得不挖掘更多信息以找出缓存计划的产生时间。这只是为了让您了解查询的范围。大多数都相当复杂,有20多个连接。 @ srutzky-是的,我相信会有一个与计划编制时间相关的日期栏,因此您将对此感兴趣,因此我将对其进行检查。我想知道,当SQL Server位于VMware群集上时,线程限制是否会成为一个因素?值得庆幸的是,即将成为专用的Dell PE 730xD。 @Frisbee-对不起,您的回复很晚。正如您所建议的,我使用SQLQueryStress在空表中对24个线程运行了10,000次select *(实际上是240,000次迭代),并立即达到10,000个批处理请求/秒。然后,我在24个线程中减少了1000次,并达到了4,000个批处理请求/秒以下。我还仅在12个线程上尝试了10,000次迭代(因此总共进行了120000次迭代),这产生了持续的6,505批/秒。实际上,对CPU的影响非常明显,在每次测试运行期间,约占CPU总使用量的5-10%。网络等待时间可以忽略不计(例如,工作站上的客户端需要3毫秒),但是对CPU的影响是肯定的,就我而言,这是非常确定的。这似乎归结为CPU使用率和一些不必要的数据库文件IO。每秒总执行次数约为3000次,这比生产中的要多,但是我只测试了数十个这样的查询之一。数百个查询以每分钟300-4000次之间的速率命中空表的最终结果在CPU时间方面不可忽略。所有测试都是针对具有双闪存阵列和256GB RAM,12个现代内核的空闲PE 730xD进行的。 @ srutzky-好主意。默认情况下,SQLQueryStress似乎使用连接池,但是无论如何,我发现,是的,连接池复选框已选中。更新以跟随 @ srutzky-应用程序上的连接池显然未启用-如果已启用,则无法使用。我进行了探查器跟踪,发现对于审计登录事件,连接具有EventSubClass“ 1-Nonpooled”。 RE:连接池-检查了weblogics,发现启用了连接池。针对活着的发现更多痕迹,发现池化迹象没有正确/根本没有: 这是当我对填充的表没有连接的情况下运行单个查询时的样子。异常显示为“与SQL Server建立连接时发生与网络有关或特定于实例的错误。找不到服务器或无法访问该服务器。请验证实例名称正确并且已将SQL Server配置为允许远程连接。 (提供程序:命名管道提供程序,错误:40-无法打开与SQL Server的连接)“请注意批处理请求计数器。在生成异常的时间内对服务器执行ping操作会成功执行ping响应。 更新-两次连续的测试运行,相同的工作量(select * fromEmptyTable),启用/未启用池。CPU使用率略高,故障很多,并且从未超过500个批处理请求/秒。测试显示10,000个批处理/秒,并且在启用池的情况下没有失败,大约400个批处理/秒,然后由于禁用了池而导致很多失败。我想知道这些故障是否与连接可用性不足有关? @srutzky-从sys.dm_exec_connections中选择Count(*); 启用池化:即使在负载测试停止后也始终保持37 禁用池化:11-37,具体取决于是否 在SQLQueryStress 上发生异常,即:当这些低谷出现在Batchs / sec图上时,在SQLQueryStress上发生异常,并且 连接数下降到11,然后逐渐恢复到37当批次开始达到高峰且未发生异常时。非常非常有趣。 两个测试/活动实例上的最大连接数设置为默认值0。 已经检查了应用程序日志并且找不到连接问题,但是由于错误的数量和大小(即:大量的堆栈跟踪错误),只有几分钟的可用日志记录可用。应用程序支持的一位同事建议,发生大量与连接有关的HTTP错误。似乎基于此,由于某种原因,应用程序无法正确地建立连接池,结果服务器反复耗尽连接。我将进一步研究应用日志。我想知道是否有办法从SQL Server方面证明这种情况正在生产中发生? @ …

1
报告的索引大小和执行计划中的缓冲区数之间存在巨大的不匹配
问题 我们有一个类似的查询 SELECT COUNT(1) FROM article JOIN reservation ON a_id = r_article_id WHERE r_last_modified < now() - '8 weeks'::interval AND r_group_id = 1 AND r_status = 'OPEN'; 由于超时(通常在10分钟后)更多,因此我决定调查此问题。 该EXPLAIN (ANALYZE, BUFFERS)输出如下所示: Aggregate (cost=264775.48..264775.49 rows=1 width=0) (actual time=238960.290..238960.291 rows=1 loops=1) Buffers: shared hit=200483 read=64361 dirtied=666 written=8, temp read=3631 written=3617 I/O Timings: …

2
有没有一种方法可以优化按联接表的列排序?
这是我的慢查询: SELECT `products_counts`.`cid` FROM `products_counts` `products_counts` LEFT OUTER JOIN `products` `products` ON ( `products_counts`.`product_id` = `products`.`id` ) LEFT OUTER JOIN `trademarks` `trademark` ON ( `products`.`trademark_id` = `trademark`.`id` ) LEFT OUTER JOIN `suppliers` `supplier` ON ( `products_counts`.`supplier_id` = `supplier`.`id` ) WHERE `products_counts`.product_id IN (159, 572, 1075, 1102, 1145, 1162, 1660, 2355, …
10 mysql  order-by 

1
用XQuery替换SQL Server中强类型xml元素的值
给定一个元素,在XML Schema Collection中定义如下: <xsd:element name="xid"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="32" /> </xsd:restriction> </xsd:simpleType> </xsd:element> 您将如何使用XQuery更新元素? 该元素位于模式集合的ns命名空间中。我一直在尝试通过以下查询更新元素: update cm.item set data.modify( 'declare namespace ns="http://www.anon.com"; replace value of (/ns:*/ns:xid)[1] with "X00011793" cast as element(ns{http://www.anon.com}:xid,#anonymous) ?') where id = 11793 但这会产生以下错误: 消息9301,级别16,状态1,第2行XQuery [cm.item.data.modify()]:在此版本的服务器中,“ cast as”不可用。请使用“投射为?” 句法。 如果我完全删除演员表并使用此查询: update cm.item set data.modify( 'declare namespace …

3
仅当过滤的部分位于JOIN而不是WHERE时才使用过滤的索引
我在下面创建了过滤索引,但是当我进一步向下运行2个查询时,该索引仅在JOIN中具有END_DTTM而不是where子句的第一个示例中用于查找(这是查询中的唯一区别) 。谁能解释为什么会这样? 索引创建 CREATE NONCLUSTERED INDEX [ix_PATIENT_LIST_BESPOKE_LIST_ID_includes] ON [dbo].[PATIENT_LIST_BESPOKE] ( [LIST_ID] ASC, [END_DTTM] ASC ) WHERE ([END_DTTM] IS NULL) 查询 DECLARE @LIST_ID INT = 3655 --This one seeks on the index SELECT PATIENT_LISTS.LIST_ID FROM DBO.PATIENT_LISTS LEFT JOIN DBO.PATIENT_LIST_BESPOKE ON PATIENT_LISTS.LIST_ID = PATIENT_LIST_BESPOKE.LIST_ID AND PATIENT_LIST_BESPOKE.END_DTTM IS NULL WHERE PATIENT_LISTS.LIST_ID = @LIST_ID …

3
SQL Server:以小块的形式更新巨大表上的字段:如何获取进度/状态?
我们有一个非常大的表(一亿行),我们需要在表上更新几个字段。 对于日志传送等,显然,我们也希望将其保持在很小的规模上。 下面会解决问题吗? 以及如何获取它以打印一些输出,以便我们可以看到进度?(我们尝试在其中添加PRINT语句,但在while循环期间未输出任何内容) 代码是: DECLARE @CHUNK_SIZE int SET @CHUNK_SIZE = 10000 UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or deletedDate is null WHILE @@ROWCOUNT > 0 BEGIN UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or …
10 sql-server  t-sql 

5
计算表的行大小和最大行大小
问题: 有什么方法可以计算表创建所占用的字节数,我知道您可以从information_schema.tables中获取一些信息,但是该信息不够准确。 实际需要的是根据表定义(仅针对innodb的字节数),归类也可以视为utf-8-general-ci 例如表测试如下 创建表测试 ( col1 varchar(25), col2 int, col3 varchar(3), col4 char(15), col5 datetime ); 现在需要根据表中的列类型知道一行中可以累积的总行大小。 在MSSQL中找到了某种类似的解决方案,但需要其MySQL版本 用于估算任何表的行大小的脚本 任何帮助深表感谢。

2
MySQL安装问题
首先,请原谅,这个职位很长,需要一些背景,第二;我很难从噪声中分辨出信号,如果其中一些与噪声无关,请忍受: 几周前,我自愿选择升级到Windows10。这样做之后,我最终决定删除不再需要的Python安装。删除最新的2.7(并仅保留3.4.3)后,一切似乎都可以正常工作,直到我的计算机意外崩溃。从那时起,Windows 10就再也不一样了,极其不可靠。 在启动时,我不得不再次降级到Windows 7。我收到了两条错误消息:一条说找不到python dll,另一条说: 在动态链接库RPCRT4.dll中找不到过程入口点RpcImpersonateClientContainer 我认为第二个错误至关重要。粗略的搜索指向this,它表示这是Windows 10唯一的进程。 我设法多次重新安装和卸载python 2.7和3.4.3,并且不再出现python dll错误(因此,我目前拥有3.4.3作为计算机中唯一的Python版本)。 但是,第二个错误仍然存​​在。我尝试卸载计算机中的所有MySQL服务,除以下两个以外,我大部分都成功了: MySQL Connector 6.9.5和MySQL for Excel 1.3.3,无论我做什么,都无法卸载。我在此答案中尝试了解决方案,但收到以下错误: OpenService失败1060: 指定的服务不存在为已安装的服务。 现在,我正尝试通过Microsoft安装程序(扩展名为msi)重新安装MySQL社区版本5.6.26.0。我单击它,然后显示在显示“收集相关信息...”之类的窗口中,然后它消失了。 注意:当我尝试通过网络社区进行安装时。我设法进入以下屏幕(您是否希望该程序进行更改...?),然后它再次消失。 在Windows进程中都找不到这两者。 但是,在运行Web社区几次后,MySQL Installer -Community在我的列表中显示为已安装程序以进行更改/卸载。如果我尝试更改它,什么也不会发生,但是如果我尝试将其卸载: 在动态链接库RPCRT4.dll中找不到过程入口点RpcImpersonateClientContainer 同样,第二个错误(但设法将其卸载)。 另一个谷歌搜索后来,这个法语线程弹出。我的法语充其量不过是草率的,但唯一的回答似乎表明DLL损坏了,也许是全新安装了? 也许是不相关的注释:我的计算机在每次启动时都要求我进行更新。几分钟后,熟悉的徽标将弹出“关闭”选项。每次我选择安装更新时,它显然都安装了,并在启动时配置了更多内容。但是每次,它再次发生。 我进行了更彻底的检查,并一遍又一遍地安装了KB3083186,因此我修复了.NET 4.6,禁用了自动更新,现在看来还不错。 我的机器的相关详细信息如下: 操作系统:Windows 7家庭高级版,Service Pack 1。 系统: HP Pavilion dm4笔记本电脑 处理器: 英特尔酷睿i5-3210 CPU 2.50GHz 内存: 6 GB 我的理想结果是避免重新安装(对于我来说似乎是一个核选项),删除所有MySQL服务,正确安装它们以及能够使用Workbench(以及其他与MySQL相关的产品)。 …

1
SQL Server数据文件夹访问权限
我做了全新的SQL Server 2014安装。接下来,我想附加以前的SQL Server 2012服务器中的一些数据库。我将所有mdf和ldf文件复制到数据目录,但是当我尝试附加它们时,出现以下错误消息: 尝试打开或创建物理文件 'D:\ SQLSERVERDATA \ MSSQL12.BIDEV \ MSSQL \ DATA \ controlling_demo.mdf'时,CREATE FILE遇到操作系统错误5(访问被拒绝)。 (Microsoft SQL Server,错误:5123) 当我检查文件安全性设置(右键单击文件,属性,安全性)时,它说我没有读取权限。我用来复制文件的帐户在Administrators组中。我可以完全控制该DATA文件夹,但是,仅复制到该文件夹的文件受到限制。 当我尝试在整个文件夹上重新应用安全权限时,它说: 无法枚举容器中的对象。访问被拒绝。 将文件复制到其他位置时,我具有访问权限。 问题是,如何获得文件DATA夹中这些文件的访问权限?


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.