数据库管理员

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

2
对范围内的每个日期运行复杂的查询
我有一张订单表 Column | Type | Modifiers ------------+-----------------------------+----------------------------------------------------- id | integer | not null default nextval('orders_id_seq'::regclass) client_id | integer | not null start_date | date | not null end_date | date | order_type | character varying | not null 数据的client_id具有不重叠的常规,并且在临时数据具有匹配的client_id时,有时会覆盖其start_date上的常规。存在应用程序级别约束,以防止相同类型的订单重叠。 id | client_id | start_date | end_date | order_type ----+-----------+------------+------------+------------ 17 …

2
SQL Server的最大内存包括SSIS?
我在以下服务器上安装了2个sql服务器实例以及SSIS。 请注意,RAM的容量接近384 GB 这是我已应用于两个实例的最大和最小内存设置。我假设两个实例都将使用相同数量的资源,如果确实如此,那么184,320 MB(180 GB)是设置内存的一个很好的起点吗? 我将为SSIS分配多少内存?

3
用mongoexport还是mongodump备份?
对于生产备份,MongoDB建议使用mongodump而不是mongoexport来确保数据的准确性。但是,我需要在备份之前从MongoDB数据库中“清理”数据。除了mongoexport之外,我不知道任何服务器端数据清理选项。两个问题: mongoexport是否访问RAM中的MongoDB缓存?它会像mongodump一样改变RAM中的工作集吗? mongodump命令具有此--query选项。“提供JSON文档作为查询,可以选择限制mongodump输出中包含的文档。” 是否需要查询以排除文档中的某些字段?
9 backup  mongodb 

2
SQL Developer代码格式
我刚刚剪切'n'将一些SQL代码粘贴到SQL Developer(4.0.2.15)中。我设置了右边距,然后选择CTRL + F7对其进行格式化。但是我有两个问题 代码比我设置的右边距还要宽 关键字使用大写字母,此处的编码标准为小写。 我一直找不到如何更改此设置,或者这可能吗?

3
将除一列以外的所有列标记为主键是否合理?
我有一张代表电影的桌子。字段是: id (PK), title, genre, runtime, released_in, tags, origin, downloads。 我的数据库不能被重复的行污染,所以我想强制唯一性。问题在于,除了tags和之外,不同的电影可能具有相同的标题,甚至相同的字段downloads。如何实施唯一性? 我想到了两种方法: 使除downloads主键之外的所有字段。我将其downloads排除在外,因为它是JSON,它可能会影响性能。 仅保留id为主键,但为所有其他列添加唯一约束(再次除外downloads)。 我读过这个非常相似的问题,但是我不太明白该怎么办。当前,该表与任何其他表均不相关,但将来可能与此相关。 目前,我的记录略少于20,000,但是我希望这个数字会增加。我不知道这是否与问题有关。 编辑:我修改了架构,这是我将如何创建表: CREATE TABLE movies ( id serial PRIMARY KEY, title text NOT NULL, runtime smallint NOT NULL CHECK (runtime >= 0), released_in smallint NOT NULL CHECK (released_in > 0), genres text[] NOT NULL default …

1
使用外键上的显式单键值克服MERGE JOIN(INDEX SCAN)
已添加7/11问题是在MERGE JOIN期间由于索引扫描而发生死锁。在这种情况下,一个事务试图在FK父表的整个索引上获得S锁,但是以前另一个事务将X锁置于索引的键值上。 让我从一个小例子开始(使用70-461 cource的TSQL2012 DB): CREATE TABLE [Sales].[Orders]( [orderid] [int] IDENTITY(1,1) NOT NULL, [custid] [int] NULL, [empid] [int] NOT NULL, [shipperid] [int] NOT NULL, ... ) 列[custid], [empid], [shipperid]是相应的相关参数[Sales].[Customers], [HR].[Employees], [Sales].[Shippers]。在每种情况下,我们在父母表中的引用列上都有一个聚集索引。 ALTER TABLE [Sales].[Orders] WITH CHECK ADD CONSTRAINT [FK_Orders_Customers] FOREIGN KEY([custid]) REFERENCES [Sales].[Customers] ([custid]) ALTER TABLE [Sales].[Orders] WITH CHECK ADD …

2
查找整数序列包含给定子序列的行
问题 注意:我指的是数学序列,而不是PostgreSQL的序列机制。 我有一张表,代表整数序列。定义是: CREATE TABLE sequences ( id serial NOT NULL, title character varying(255) NOT NULL, date date NOT NULL, sequence integer[] NOT NULL, CONSTRAINT "PRIM_KEY_SEQUENCES" PRIMARY KEY (id) ); 我的目标是使用给定的子序列查找行。也就是说,其中sequence字段是包含给定子序列的序列的行(在我的情况下,该序列是有序的)。 例 假设该表包含以下数据: +----+-------+------------+-------------------------------+ | id | title | date | sequence | +----+-------+------------+-------------------------------+ | 1 | BG703 | 2004-12-24 …

2
在Postgres 9.4中将json_to_record与JSON数组元素一起使用时出现“错误:格式错误的数组文字”
这很好地说明了这个问题: 当b列是文本类型而不是数组类型时,将执行以下操作: select * from json_to_record('{"a":1,"b":["hello", "There"],"c":"bar"}') as x(a int, b text, d text); a | b | d ---+--------------------+--- 1 | ["hello", "There"] | 但是,如果我将b列定义为数组,则会出现此错误: select * from json_to_record('{"a":1,"b":["hello", "There"],"c":"bar"}') as x(a int, b text[], d text) ERROR: malformed array literal: "["hello", "There"]" DETAIL: "[" must introduce explicitly-specified array …

1
有效地存储键值对的集合,这些键值对具有完全不同的键
我继承了一个将许多不同类型的活动与站点相关联的应用程序。大约有100种不同的活动类型,每一种都有3-10个字段的不同集合。但是,所有活动至少都有一个日期字段(可以是日期,开始日期,结束日期,预定开始日期等的任意组合)和一个负责人字段。所有其他字段的差异很大,开始日期字段不一定称为“开始日期”。 为每种活动类型创建一个子类型表将导致具有100个不同子类型表的模式,这太麻烦了以至于无法处理。该问题的当前解决方案是将活动值存储为键值对。这是当前系统的一个大大简化的架构,可以用来说明要点。 每个活动都有多个ActivityField;每个站点都有多个活动,并且SiteActivityData表存储每个SiteActivity的KVP。 这使基于Web的应用程序非常容易编写代码,因为您真正需要做的就是遍历SiteActivityData中给定活动的记录,并为表单的每一行添加标签和输入控件。但是有很多问题: 诚信不好;可以在SiteActivityData中放置一个不属于活动类型的字段,而DataValue是一个varchar字段,因此需要不断地转换数字和日期。 报告和临时查询此数据非常困难,容易出错且速度很慢。例如,要获得某个结束日期在指定范围内的某种类型的所有活动的列表,则需要进行数据透视并将varchars转换为日期。报表编写者讨厌这种模式,我不怪他们。 因此,我要寻找的是一种存储大量几乎没有共同字段的活动的方式,从而可以简化报告。到目前为止,我想出的是使用XML以伪noSQL格式存储活动数据: Activity表将包含每个活动的XSD,从而无需使用ActivityField表。SiteActivity将包含键值XML,因此站点的每个活动现在都位于一行中。 一个活动看起来像这样(但是我还没有完全充实它): <SomeActivityType> <SomeDateField type="StartDate">2000-01-01</SomeDateField> <AnotherDateField type="EndDate">2011-01-01</AnotherDateField> <EmployeeId type="ResponsiblePerson">1234</EmployeeId> <SomeTextField>blah blah</SomeTextField> ... 优点: XSD将验证XML,捕获错误,例如在数据库级别将字符串放入数字字段中,这对于将所有内容都存储在varchar中的旧模式是无法实现的。 用于构建Web表单的KVP记录集可以很容易地使用 select ... from ActivityXML.nodes('/SomeActivityType/*') as T(r) XML的xpath子查询可用于生成一个包含开始日期,结束日期等列的结果集,而无需使用数据透视表,例如 select ActivityXML.value('.[@type=StartDate]', 'datetime') as StartDate, ActivityXML.value('.[@type=EndDate]', 'datetime') as EndDate from SiteActivity where... 这似乎是个好主意吗?我想不出其他方式来存储大量不同的属性集。我的另一个想法是保留现有模式,并将其转换为更容易在数据仓库中查询的内容,但是我以前从未设计过星型模式,也不知道从哪里开始。 附加问题:如果我使用定义XSD中具有日期数据类型的标记xs:date,SQL Server会将其索引为日期值吗?我担心如果我按日期查询,它将需要将日期字符串转换为日期值并浪费使用索引的任何机会。

1
PK上的压缩与表上的压缩之间有什么区别?
可以在表上设置数据压缩: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED ( SomeId Desc ) ) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE) 可以在主键上定义它: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY …

1
将文件组设置从RESTRICTED_USER更改为MULTI_USER后,为什么我的数据库镜像崩溃了?
我的环境如下: VMWare 5.5充满活力的服务器MS Windows Server 2008R2 Enterprise域和SQL Server 2008 R2 Enterprise。具有光纤通道连接的集中存储。 我的分区中有分区SQL Server DB。我有2个file groups:一个带有实时数据(FG1),第二个带有历史数据(HDG)。 第二个文件组是read-only。每个月我都会在分区中移动-我将新数据(上个月的数据)添加到历史数据中。这个过程是自动的。 我们将数据库移至新服务器。最初,我必须手动执行该过程。在此操作期间,我的镜像发生故障(在操作3之后-参见下面的流程),并出现以下错误: 在主要服务器上: 日志中的行0: Date 15.6.2015 20:54:11 Log SQL Server (Current - 16.6.2015 07:55:00) Source spid84 Message Setting database option MULTI_USER to ON for database MYDB. 日志中的第1行: Date 15.6.2015 20:54:11 Log SQL Server (Current - …

2
SQL Server DB在一夜之间变得无法使用
昨天,我的SQL Server数据库很好。如今,它几乎无法使用-减慢了5到20倍,具体取决于我何时按下它。 在通宵的加载过程中,一些数据已添加到服务器,但没有什么比对数据库有很大影响的卷更是如此。大约50,000条纯文本记录(没有XML或其他轻率的记录)。 该服务器已在今天早晨修补后重新启动。但是,我们所有其他也已打补丁的数据库服务器的行为都不相同。 资源监视器似乎暗示其磁盘IO有故障。即使在数据库中没有实际发生任何事情时,它始终在.mdf文件上以接近100%的容量运行。对Templog.ldf的访问也非常高。 这里没有人是专家DBA(我们都是拥有不同SQL技能的开发人员),我们都对发生的事情感到困惑。我们尝试运行sp_updatestats并将一些大索引移到不同的光盘上,但无济于事。 我认为这一定与补丁有关-似乎太多的巧合。一位同事确信,由于数据负载导致mdf的大小增加到导致执行计划变得效率低下的程度。 到底是什么原因造成的?我们如何找出答案,我们该如何解决? 编辑: 使用sp_WhoIsActive不会显示任何异常。它记录了我自己对sproc的使用以及来自当前正在尝试移动另一个索引的同事的一些命令。那可能现在正在支撑数据库,但是它之前运行得很差。 它是SQL Server 2008 R2的标准版本。SELECT @@VERSION给出: Microsoft SQL Server 2008 R2(SP2)-10.50.4033.0(X64) 2014年7月9日 版权所有(c)Windows NT 6.1(Build 7601:Service Pack 1)上的Microsoft Corporation标准版(64位)(Hypervisor ) 该服务器具有72GB的RAM和三个四核2GHz处理器。 该修补程序仅适用于Windows。除补丁外,没有其他更改。 所选设置: _id name value minimum maximum value_in_use description is_dynamic is_advanced 1540 min memory per query (KB) 1024 512 2147483647 …

2
PostgreSQL中的批量插入M:N关系
我需要将数据从旧数据库导入到新数据库,结构稍有不同。例如,在旧数据库中,有一个表记录员工及其主管: CREATE TABLE employee (ident TEXT PRIMARY KEY, name TEXT, supervisor_name TEXT) 现在,新数据库如下: CREATE TABLE person (id BIGSERIAL PRIMARY KEY, name TEXT, old_ident TEXT); CREATE TABLE team (id BIGSERIAL PRIMARY KEY); CREATE TABLE teammember (person_id BIGINT, team_id BIGINT, role CHAR(1)); 也就是说,新的(更通用的)数据库可以代替创建带有主管名称的普通员工表,而是创建人员团队。员工是有角色的成员'e',主管是有角色的's'。 问题是如何轻松地将数据从迁移employee到新结构,每个员工-主管对一个团队。例如员工 employee: ('abc01', 'John', 'Dave'), ('abc02', 'Kyle', 'Emily') 将被迁移为 …

3
Postgres正在执行顺序扫描而不是索引扫描
我有一个表,其中包含约1000万行,并且在日期字段上有一个索引。当我尝试提取索引字段的唯一值时,即使结果集只有26个项目,Postgres也会运行顺序扫描。为什么优化师会选择此计划?而我该如何避免呢? 从其他答案中,我怀疑这与查询和索引都息息相关。 explain select "labelDate" from pages group by "labelDate"; QUERY PLAN ----------------------------------------------------------------------- HashAggregate (cost=524616.78..524617.04 rows=26 width=4) Group Key: "labelDate" -> Seq Scan on pages (cost=0.00..499082.42 rows=10213742 width=4) (3 rows) 表结构: http=# \d pages Table "public.pages" Column | Type | Modifiers -----------------+------------------------+---------------------------------- pageid | integer | not null default nextval('... …

1
在Postgres中存储大量文本有哪些压缩选项?
我需要在Postgres中存储大量文本,主要是命令日志和长时间运行的命令的输出,并且需要知道是否有一些设置可以使用zlib之类的工具或其他本机空间节省方法来透明地压缩数据。 。 数据主要是只读数据,因此写入不是问题。

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.