数据库管理员

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

4
使用GROUP BY和ORDER BY对大表进行慢查询
我有一张桌子,上面有720万个元组,看起来像这样: table public.methods column | type | attributes --------+-----------------------+---------------------------------------------------- id | integer | not null DEFAULT nextval('methodkey'::regclass) hash | character varying(32) | not null string | character varying | not null method | character varying | not null file | character varying | not null type | character varying | …

2
对子集聚合建模约束?
我使用的是PostgreSQL,但我认为大多数高端数据库必须具有一些类似的功能,而且,针对它们的解决方案可能会为我带来灵感,因此,请不要考虑此特定于PostgreSQL。 我知道我不是第一个尝试解决此问题的人,因此我认为这里值得一问,但我正在尝试评估建模会计数据的成本,以便使每笔交易都达到基本平衡。会计数据是仅追加的。这里的总体约束(用伪代码编写)可能大致类似于: CREATE TABLE journal_entry ( id bigserial not null unique, --artificial candidate key journal_type_id int references journal_type(id), reference text, -- source document identifier, unique per journal date_posted date not null, PRIMARY KEY (journal_type_id, reference) ); CREATE TABLE journal_line ( entry_id bigint references journal_entry(id), account_id int not null references account(id), …

1
UPSERT-MERGE或@@ rowcount是否有更好的替代方法?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 我想知道您是否遇到过类似于UPSERT概念的T-SQL命令?使用选项(1)或(2)执行INSERT | UPDATE操作似乎过于复杂且容易出错。 目的 为了确保所需的记录(在本例中为employee_id 1)是最新的,而不必本质上两次写入相同的查询。 语境 表名:员工 员工编号:具有主键,并且身份属性设置为true 选项 执行SQL UPDATE ...检查@@ rowcount = 0和@@ error = 0 ...根据需要执行SQL INSERT 缺点:您实际上必须两次编写相同的查询,一次作为插入,一次作为更新 缺点:更多的代码=更多的输入时间 缺点:更多代码=更多错误空间 /programming/1106717/how-to-implement-a-conditional-upsert-stored-procedure “使用@@ rowcount更新” 执行一个SQL MERGE 缺点:您实际上必须两次编写相同的查询,一次作为插入,一次作为更新 缺点:更多的代码=更多的输入时间 缺点:更多代码=更多错误空间 http://technet.microsoft.com/zh-cn/library/bb510625.aspx “ T-SQL合并” 执行SQL UPSERT(功能不存在) 专家:您一次定义了数据与表的关系(让SQL Server担心它是INSERT还是UPDATE) 优点:更少的代码=更快的实现 优点:更少的代码=更低的概率 UPSERT示例 UPSERT雇员(employee_id,employee_number,job_title,first_name,middle_name,sname,modified_at)VALUES(1,'00 -124AB37','Manager','John','T','Smith',GetDate()); 如果employee_id 1不存在:MS SQL执行INSERT语句 …

3
我什么时候需要备份服务主密钥?
我正在阅读有关透明数据加密的一些文档和白皮书。一些文档还提到了备份服务主密钥(为澄清起见,我不是在谈论数据库主密钥)。我只是不完全理解为什么这样做是必要的,因为我可以使用TDE加密将数据库从服务器A(备份)备份/还原到服务器B(还原)而无需使用任何服务主密钥。 在什么情况下我需要还原服务主密钥?

3
并行统计更新
在SQL Server 2008或更高版本中,是UPDATE STATISTICS WITH FULLSCAN单线程操作还是可以使用并行性?如何使用默认采样更新统计信息-它可以使用并行性吗?我没有看到指定MAXDOP更新统计信息的选项。

2
如何删除还原数据库
我正在使用SQL Server 2008 R2运行日志传送。 我遇到以下情况:辅助数据库驱动器空间不足,没有应用日志传送事务日志。 我要解决的方法是删除辅助数据库并从头开始配置日志传送。 我现在遇到的问题是辅助数据库处于还原状态,无法删除它们。我该如何进行? 例如,如果我尝试使它们脱机,则会收到错误消息, ALTER DATABASE is not permitted while the database is in the Restoring state.

3
查询期间从磁盘检索到什么?
很简单的问题,可能在某个地方回答了,但是我似乎无法为Google形成正确的搜索问题... 在特定表的子集上进行查询时,该表中的列数是否会影响查询的性能? 例如,如果表Foo有20列,但是我的查询只选择了其中的5列,那么拥有20列(相对于说10列)是否会影响查询性能?为简单起见,假设这5列中包含WHERE子句中的任何内容。 除了操作系统的磁盘缓存之外,我还担心Postgres的缓冲区缓存的使用。我对Postgres的物理存储设计非常了解。表存储在多页中(默认每页大小为8k),但我不太了解如何从那里排列元组。PG是否足够聪明,仅从磁盘中获取包含这5列的数据?

2
如何添加有权访问单个视图的用户?
我正在使用MSSQL Server Management Studio 2008,并且需要向第三方公开其数据协调的视图。我已经创建了适当的视图,但是在创建用户和授予该用户适当的权限以从视图中选择时遇到了麻烦。 我遵循了用于创建登录名和用户的向导,然后在“安全性”部分中添加了我的视图,并选中了“授予”框。一切似乎都很好,但是当我以该用户身份登录并尝试执行“从MyViewName中选择*”时,它告诉我选择权限被拒绝。 我只是重新创建了用户(这次只是使用SQL而不是向导),并明确授予了选择权限,现在它给了我错误:(Msg 916, Level 14, State 1, Line 2 The server principal "username" is not able to access the database "unrelated_db" under the current security context.我不知道为什么它试图访问不相关的数据库...) 我真的不知道从这里去哪里。同样,基本上,我所需要做的就是创建一个我可以提供给第三方的用户,以使他们连接到我们的数据库并从该视图中进行选择。


5
什么是可视化SQL Agent作业的好工具?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 4年前关闭。 我发现用于管理代理作业的内置MS SQL Studio工具有些令人沮丧。您发现哪些工具有用? 副手,我想在这种工具中看到三件事: 有关哪些作业何时运行,持续多长时间以及是否成功的图形摘要。 当前状态视图,如“作业活动监视器”,但几乎实时刷新。 用于复制或修改作业的更方便的界面(例如,比较两个作业步骤而不会被模态对话框阻止)。 编写一个小应用程序来处理此问题可能很简单,但是肯定有人已经做到了,并且做得更好。 这显然是一个主观的问题,因此,如果某种mod徘徊不前,请随时将其设为CW。

3
为什么简单的ALTER TABLE命令在带有全文索引的表上花费这么长时间?
我有一个很大的(约6700万行)名称/值表,该值在DataValue列上具有全文本索引。 如果我尝试运行以下命令: ALTER TABLE VisitorData ADD NumericValue bit DEFAULT 0 NOT NULL; 它运行1小时10分钟,但仍无法在VisitorData包含约6700万行的表上完成。 为什么要花这么长时间而没有完成? 我该怎么办? 以下是有关表格的更多详细信息: CREATE TABLE [dbo].[VisitorData]( [VisitorID] [int] NOT NULL, [DataName] [varchar](80) NOT NULL, [DataValue] [nvarchar](3800) NOT NULL, [EncryptedDataValue] [varbinary](max) NULL, [VisitorDataID] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_VisitorData_VisitorDataID] PRIMARY KEY CLUSTERED ( [VisitorDataID] ASC ) WITH (PAD_INDEX …

2
SQL Server VARCHAR列宽
在网上搜索时,我发现在指定超宽VARCHAR列(例如VARCHAR(30)可能会这样做时,例如VARCHAR(255))时是否会对性能产生影响的建议相互冲突。 我始终认为,如果整行超过8060字节,则会对性能造成影响。除此之外,我看到了分歧。 要求是真的The default is SET ANSI PADDING ON = potential for lots of trailing spaces吗?只要总行宽小于8060,在VARCHAR列过大设置时是否存在真正的性能问题? 列宽很重要的证据 The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that you need. http://www.sql-server-performance.com/2007/datatypes/ Length is a constraint on the data (like CHECK, FK, NULL etc) Performance …

5
SQL Server链接服务器性能:为什么远程查询如此昂贵?
我有两个通过链接服务器连接的数据库服务器。两者都是SQL Server 2008R2数据库,并且链接的服务器连接是使用当前登录名的安全上下文通过常规的“ SQL Server”链接建立的。链接的服务器都位于同一数据中心中,因此连接不成问题。 我使用以下查询来检查列的哪些值identifier可远程使用,但不能在本地使用。 SELECT identifier FROM LinkedServer.RemoteDb.schema.[TableName] EXCEPT SELECT DISTINCT identifier FROM LocalDb.schema.[TableName] 在两个表上,列上的都是非聚集索引identifier。本地大约有260万行,远程只有54行。但是,在查看查询计划时,70%的执行时间专用于“执行远程查询”。此外,在研究完整的查询计划时,将使用估计的本地行数1代替2695380(这是仅选择后面的查询时的估计行数EXCEPT)。 当执行此查询时,确实需要很长时间。 这让我感到奇怪:这是为什么?估算是“正确”的吗?还是在链接服务器上进行远程查询真的那么昂贵?


2
了解EXPLAIN命令的时间格式-Postgres
当我在给定查询上运行EXPLAIN ANALYZE命令时,我很难解释输出的时间值。例如(实际时间= 8163.890..8163.893)。内部小数代​​表重复字符吗?抱歉,这可能是一个讨厌的问题,但是我想确保我正确地解释了结果。 -> GroupAggregate (cost=2928781.21..2929243.02 rows=1 width=27712) (actual time=8163.890..8163.893 rows=1 loops=1)

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.