数据库管理员

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

2
在psql中使用\ dt(+)时,为什么看不到表(PostgreSQL)?
我已经按照以下方式donor在架构中创建了表reference: CREATE TABLE reference.donor ( donor_code smallint PRIMARY KEY, donor_name character varying NOT NULL, donor_type smallint REFERENCES reference.donor_type (type_id), alpha_2_code char(2) REFERENCES reference.iso_3166_1 (alpha_2_code) ); 我已经按照以下表格填充了表格: INSERT INTO reference.donor (donor_code, donor_name, donor_type, alpha_2_code) SELECT donor_code, donor_name, donor_type, alpha_2_code FROM reference.donor_template; 当我跑步时: \dt+ reference.* 在psql里面我看到reference.donor表格: List of relations Schema | Name …

1
为什么将SQL Server安装到驱动器的根目录是不好的做法
例如,当我将SQL Server安装到驱动器的根目录中D:\时,当我从第三方软件运行数据库部署程序时出现错误。 但是,当我将我的SQL Server实例D:\SQL\移动到(将其移动到驱动器中的文件夹中)时,安装可以完美地进行。 我的问题不是关于数据库部署者的问题,而是更多关于SQL安装到驱动器根目录时会出现问题的原因。这是不好的做法吗?为什么我不应该将SQL Server安装到驱动器的根目录?

1
将两个事件表合并为一个时间表
给定两个表: CREATE TABLE foo (ts timestamp, foo text); CREATE TABLE bar (ts timestamp, bar text); 我想编写一个查询,对于回报值ts,foo以及bar代表最新的值的统一视图。换句话说,如果foo包含: ts | foo -------- 1 | A 7 | B 并bar包含: ts | bar -------- 3 | C 5 | D 9 | E 我想要一个返回的查询: ts | foo | bar -------------- 1 | A …

2
不测试一项功能还可以吗?
您是否在任何时候都对语言/数据库/系统如此熟悉,从而无需测试新功能/配置/查询/等。在系统中实施之前进行了包含/模拟的测试(特别是涉及修改数据的功能)?还是在测试环境中通过仿真测试新查询总是必不可少的吗? 为了进一步说明,很显然,测试始终是最安全的。但是,是否有办法确定何时风险很小,以至于不值得进行测试?措辞的另一种说法是:什么时候或曾经有专业的实践来承担实施功能的风险? 另外,我们假设所有内容都已备份,因此,在最坏的情况下,可以轻而易举地恢复数据。 有人可以引用特定的专家经验来解决此问题吗?请在适当/可能的地方提供参考。

2
24/7多用户环境中的SQL Server 2014架构更改
我们安装了SQL Server 2014 Enterprise,以运行应该24/7可用的数据库。我们的数据库足够大(200gb +)。另外,我们有很多服务每分钟都会访问数据库,以读取,更新或插入新数据。我们希望为客户提供“热”重新部署功能,并使我们的每日更新(.net和架构更新)对客户透明。我们已经找到了一种基于群集的解决方案,该群集具有负载平衡器来更新应用程序的二进制文件,但是对于数据库的更新部署过程以及解决此问题的最佳实践还有一些误解。 对于架构更改,请关闭一台服务器,应用架构更改,将其备份,然后将相同的更改应用于第二个实例。可以使用SQL Server工具来完成吗,这是一种通用方法吗?备份服务器后如何同步数据?还是我完全想错了方向,是否有更好的解决方案? 我们常见的架构更改:添加/删除列,添加/删除存储过程

1
为什么SELECT *比按名称选择所有列(以不同的列顺序)要快得多?
在具有a,b,c,d,e,f,g,h,i,j,k列的表上,我得到: select * from misty order by a limit 25; Time: 302.068 ms 和: select c,b,j,k,a,d,i,g,f,e,h from misty order by a limit 25; Time: 1258.451 ms 有没有一种方法可以使按列选择速度如此之快? 更新: 在表上没有索引,新创建了一个 这是EXPLAIN ANALYZE,似乎不太有用: explain analyze select * from misty order by a limit 25; Limit (cost=43994.40..43994.46 rows=25 width=190) (actual time=404.958..404.971 rows=25 loops=1) …

2
将我的数据库项目与Azure服务器进行比较时,SSDT架构比较失败
我有一个建立在我们企业数据库上的SQL数据库项目。使用SSDT的Schema Compare工具,它已在内部和AWS托管的SQL服务器上多次部署。 当我发布到运行SQL Ent 2012 sp2的Azure Hosted Win 2012 Server时出现问题。它返回“比较完成。未检测到差异”。 我知道这是错误的,因为我可以打开企业管理器并将架构与SQL Project进行比较,并发现两者之间存在差异。 我发现了几篇有关2014版如何破坏该工具的文章,但它们之间存在版本差异。 [是的,我做了Google。说明是因为我因忘记这样做而臭名昭著。] https://www.google.com/webhp?ie=utf-8&oe=utf-8#q=ssdt+data+compare+fail+to+detect+difference&start=10 我检查过的其他内容包括确保我的数据库帐户具有无限访问权限。我可以连接管理控制台。我可以连接本地程序。 最后确认存在问题: 我创建了一个SP,该SP的返回值为1。 为了测试,它可能一无所获。 创建SP后,我在所有实例上运行架构比较,除Azure服务器以外的所有实例均显示出差异。 更新资料 我已经证实这是明确地与服务器有关的,因为现在两台不同计算机上的两个不同用户都遇到了相同的确切问题。

1
如何优化查询,使其首先查找一个索引,然后查找另一个索引
我有两组来自卫星数据的地球测量数据,每组都有时间字段(均值朱利安日期为mjd)和地理位置(GeoPoint,空间),并且我正在寻找两组数据之间的重合,以使它们的时间与阈值相匹配。 3小时(或0.125天),且彼此之间的距离不超过200公里。 我已经为表和空间表上的mjd字段都建立了索引。 当我刚刚加入时间限制时,数据库将在8秒内计算100,000个匹配项,并计算该时间内所有100,000个匹配项的距离。查询如下所示: select top 100000 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0 from L2V5.dbo.header h join L2.dbo.MLS_Header m on h.mjd between m.mjd-.125 and m.mjd+.125 option( table hint ( h, index(ix_MJD) ), table hint( m, index(ix_MJD) ) ) 执行的计划是: 排序后,有9条距离在200公里以下,因此有比赛。问题是,当我添加距离约束并改为运行它时, select top 10 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0 from L2V5.dbo.header h join L2.dbo.MLS_Header m on …


2
有关PIVOT查询的帮助
我有一个具有以下结构的表: CREATE TABLE [dbo].[AUDIT_SCHEMA_VERSION]( [SCHEMA_VER_MAJOR] [int] NOT NULL, [SCHEMA_VER_MINOR] [int] NOT NULL, [SCHEMA_VER_SUB] [int] NOT NULL, [SCHEMA_VER_DATE] [datetime] NOT NULL, [SCHEMA_VER_REMARK] [varchar](250) NULL ); 一些示例数据(似乎是sqlfiddle的问题。因此,请放置一些示例数据): INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build') INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build') INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,7,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored …

2
在SQL Server 2014上崩溃CLR(Windows 2012R2)
我有这个小的CLR,它对列中的字符串执行RegEX功能。 在Windows Server 2012R2的SQL Server 2014(12.0.2000)上运行时,该进程崩溃 消息0,级别11,状态0,行0当前命令发生严重错误。结果(如有)应丢弃。 并给我一个堆栈转储 select count (*) from table where (CLRREGEX,'Regex') 但是当我这样做 select * from table where (CLRREGEX,'Regex') 它返回行。 可以在Windows 8.1上运行的同一SQL Server版本上完美运行。 有任何想法吗? -编辑尽可能简单 using System; using System.Collections.Generic; using System.Text; using System.Data.SqlTypes; //SqlString, SqlInt32, SqlBoolean using System.Text.RegularExpressions; //Match, Regex using Microsoft.SqlServer.Server; //SqlFunctionAttribute public partial class UserDefinedFunctions …

4
5列以上的主键对大型(1亿+)表不利吗?
我正在阅读有关一些现实生活中的数据库问题的信息,一个项目有一个拥有1亿行的表格,其中有5列作为主要表格。我认为这很糟糕,但是有人可以告诉我原因吗? 该表有点像微型汇总/汇总表,因此5列是(天,market_id,product_id ...)。起初,我认为5列主键并不理想,但我想多了一点,我真的无法提出一个很好的理由来说明它不好。 这是在半夜与公司一半的工程师进行的讨论中。一位高级工程师同意,有人刚刚提到这是一个糟糕的设计,但没人真正了解原因。因此尝试自己研究问题!

1
统计信息是最新的,但估计不正确
当我这样做时dbcc show_statistics ('Reports_Documents', PK_Reports_Documents),报告ID 18698会得到以下结果: 对于此查询: SELECT * FROM Reports_Documents WHERE ReportID = 18698 option (recompile) 我得到一个查询计划,该计划使聚簇索引PK_Reports_Documents按预期进行。 但是令我感到困惑的是估计行数的错误值: 根据此: 当示例查询WHERE子句值等于直方图RANGE_HI_KEY值时,SQL Server将使用直方图中的EQ_ROWS列来确定等于的行数。 这也是我期望的样子,但是在现实生活中情况并非如此。我还尝试RANGE_HI_KEY了由提供的直方图中存在的其他一些值,show_statistics并经历了相同的情况。就我而言,此问题似乎导致某些查询使用非常不理想的执行计划,导致执行时间为几分钟,而我可以通过查询提示使其在1秒内运行。 总而言之:有人可以解释一下为什么EQ_ROWS直方图中的行数不用于估计行数以及不正确的估计值来自何处吗? 更多(可能有帮助)的信息: 自动创建统计信息已打开,并且所有统计信息都是最新的。 正在查询的表大约有8000万行。 PK_Reports_Documents是由ReportID INT和组成的组合PKDocumentID CHAR(8) 该查询似乎总共加载了5个不同的统计对象,所有这些对象都包含ReportID+表中的其他一些列。它们都已全新更新。RANGE_HI_KEY下表中的是直方图中最高的上限列值。 +-------------------------------------------------------------------------+----------+--------------+--------------+---------------------+--------------+------------+----------+---------------------+----------------+ | name | stats_id | auto_created | user_created | Leading column Type | RANGE_HI_KEY | RANGE_ROWS | EQ_ROWS | …

1
SQL Server服务帐户Windows特权和权限
我的问题是,如果您为每个SQL Server进程创建一个新的域用户帐户,则应为每个帐户设置什么权限?还是SQL配置管理器实际上会解决这个问题,而我只是遇到了无法预料的问题? 我经常不得不设置Microsoft SQL Server,并且想知道是否有人可以提供有关配置服务应以其身份运行的帐户的建议。IMO已被Microsoft模糊地记录在案,尽管他们指出了正确的方向,但我从未找到任何具体的例子。 总结到目前为止我所看到的: 对于简单的部署\开发环境,可以使用安装程序使用的默认虚拟帐户: NT SERVICE\MSSQLSERVER 避免使用该SYSTEM帐户,这是不安全的。 对于生产环境和域环境,建议为每个服务使用托管服务帐户或创建域用户帐户(而非管理员)。据称,如果您在安装时使用域帐户,则安装程序将为您设置任何必需的权限。 如果将现有安装上的服务帐户从虚拟帐户更改为域帐户,建议使用SQL Server配置管理器设置新的服务帐户。据说这将为您设置任何必需的权限。 我只是尝试将现有安装中的服务帐户更改为域帐户,这会导致登录失败,直到我授予该帐户log on as service权限为止,这与SQL Server配置管理器将设置任何必需权限的部分相矛盾。(尽管我不确定GPO是否会干扰设置此本地安全策略) Microsoft确实在此页面上提供了SQL Server安装程序授予的权限列表。 但是我不清楚这是否是我应该为创建该用户以运行该服务的用户手动执行的操作,还是使用SQL配置管理器是否应自动设置这些权限。 SQL Server 2014域控制器位于Windows Server 2008 R2上。

2
MongoDB:在应用程序服务器上共同定位mongos进程
我想问一个有关本文档中描述的最佳实践的问题: http://info.mongodb.com/rs/mongodb/images/MongoDB-Performance-Best-Practices.pdf 使用多个查询路由器。使用跨多个服务器的多个mongos进程。常见的部署是将mongos进程共定位在应用程序服务器上,从而允许应用程序和mongos进程之间进行本地通信。mongos进程的适当数量将取决于应用程序和部署的性质。 有关我们的部署的背景知识。我们有很多应用服务器节点。它们每个都使用无状态RESTful WS运行一个基于JVM的进程。正如最佳实践所建议的那样,每个单个应用程序服务器节点都运行自己的mongos进程,这意味着JVM进程的数量始终等于进程的数量mongos。 所有mongos进程都连接到3台配置服务器和几个mongo分片(每个分片内都有副本集)。即使我们使用分片部署,也没有真正分片集合。实际上,我们有大量的数据库,这些数据库在创建时就分布在所有分片上(这是目前分片的主要用例)。 由于最佳实践还表明“适当的mongos进程数量将取决于应用程序和部署的性质”,我开始怀疑我们的用法mongos实际上是否合适,或者让我们拥有几个专用mongos节点是否更好?我们的应用服务器无需mongos本地运行即可连接到它们。 您对决定mongos与应用程序服务器实例数量或MongoDB集群大小相关的多少个实例合适的最佳方法有何看法? 最近,我们开始研究无状态Web服务的集群管理,我的意思是指诸如Docker,Apache Mesos和Kubernetes之类的工具。如果我们使用的是Docker,那么通常不建议在容器内运行多个进程。考虑到这一事实,要确保应用程序服务器容器和mongos容器始终位于同一物理节点上并具有相同数量的进程,将变得非常困难。这使我想知道这种最佳实践是否仍然适用于我刚刚描述的集群体系结构。如果没有,您能否建议mongos在这种体系结构中定位和部署流程的更好方法是什么?

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.