数据库管理员

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

1
为什么禁用SQL Browser服务?
我在安装我们的产品的软件安装包中遇到间歇性问题(使用InstallShield / InstallScript编写)。在安装过程中,我们重新启动SQL Browser服务。在大多数情况下,这可以正常工作。但是偶尔-我还没有弄清楚如何可预测地重现-服务无法重新启动,并且在我的“服务”管理器中发现服务状态设置为“已禁用”。 有什么想法会导致该服务被禁用,以及如何防止它发生?

3
在asc和desc方向上创建索引
在过去的几周中,我一直在使用旧的Firebird数据库。由于种种原因,该数据库很糟糕,但是我注意到的一件事是,每个表的每个字段都有两个索引。每个都有一个段,一个按asc顺序,一个按desc顺序。 除了为每个表中的每个字段都具有索引的复杂性之外,我还想过-对于单段索引,具有两个具有相同索引段但一个进desc一出的索引是否有优势asc?有什么要收获的,还是现代的DBMS会简单地使用asc索引并从头开始,然后根据需要向后移动?
8 index  firebird 

2
返回固定行数后查询暂停
我有一个视图,它可以快速(几秒钟)运行多达41条记录(例如TOP 41),但要花44分钟或更长的时间才能显示44条或更多条记录,如果使用TOP 42或运行,则结果会中等TOP 43。具体来说,它将在几秒钟内返回前39条记录,然后暂停近三分钟,然后返回其余记录。查询TOP 44或时,此模式相同TOP 100。 该视图最初是从基本视图派生的,仅在底部代码中添加了一个过滤器,即最后一个过滤器。如果我从基础链接子视图,或者用嵌入的基础代码编写子视图,似乎没有什么区别。基本视图仅在几秒钟内返回100条记录。我想我可以使子视图的运行速度与基础视图一样快,而不是慢50倍。有人看到过这种行为吗?关于原因或解决方案的任何猜测? 在我测试了所涉及的查询后的最后几个小时,这种行为一直是一致的,尽管在事情开始变慢之前返回的行数略有起伏。这不是新事物。我现在正在查看它,因为总运行时间是可以接受的(<2分钟),但是至少在几个月以来,我已经在相关的日志文件中看到这种暂停。 封锁 我从未见过查询被阻塞,即使数据库上没有其他活动(经sp_WhoIsActive验证),问题仍然存在。基本视图包括所有NOLOCK内容,这是值得的。 查询 这是子视图的简化版本,为简单起见,基本视图都已内联。它仍然显示出运行时间的跳跃,大约有40条记录。 SELECT TOP 100 PERCENT Map.SalesforceAccountID AS Id, CAST(C.CustomerID AS NVARCHAR(255)) AS Name, CASE WHEN C.StreetAddress = 'Unknown' THEN '' ELSE C.StreetAddress END AS BillingStreet, CASE WHEN C.City = 'Unknown' THEN '' ELSE SUBSTRING(C.City, 1, 40) END AS BillingCity, …


1
我想了解IOPS(每秒I / O)及其对DB CRUD操作的影响
我想为运行InnoDB Engine的数据库(MySQL)获得专用服务器。InnoDB容量中有此选项,您可以在其中定义IOPS。假设我有一个允许100 IOPS的SATA 72K-RPM HDD。这是否意味着我的数据库只能每秒运行100个并发SQL查询,还是意味着1秒钟内可以进行100次单次读取或写入?数据库如何处理每秒在类似硬件上启动的3000个查询?我有点困惑,所以请为我解释一下。我想在专用服务器上执行200多个查询。

2
可用性组可以代替事务复制吗?
我一直在研究SQL Server 2012的新功能,以及它如何帮助解决当前的问题。 当前,我们使用SQL Server 2008 R2,并通过事务复制将两个OLTP服务器的数据库复制到单个报告服务器。然后,我们使用这些复制的DB进行报告。 我对SQL Server 2012和可用性组是否可以替代它感兴趣-因此,我将使用新的可用性组并将这两个OLTP服务器的数据库镜像到报告服务器,而不是事务复制,在该服务器上,报告将能够执行访问只读副本。 我不确定这是否会奏效,甚至根本不会奏效。 我想摆脱复制,因为它会导致我的部署策略出现问题(使用VSDBCMD.exe)。我还想摆脱大型数据库上复制重新初始化的延迟。 有人对此有任何好的例子或经验吗?是否可以按照较低版本中的常规镜像将可读副本从多个服务器镜像到单个服务器? 最初是在这里问到的:https : //stackoverflow.com/questions/10415225/mirroring-and-availability-groups-in-sql2012对不起,我认为我还不能迁移问题。


2
一个表中如何有两个自动增量列?
我有一个MySQL表,其中包含有关公司发票的信息。但是,该公司有两个分支机构,每个分支机构都有唯一的发票顺序;可以说是“意甲”和“乙”。但是,这是一家公司,我不想创建两个发票表。相反,我不知何故要为一个表具有两个不同的自动增量。我知道从技术上讲这是不可能的,但是我想这是其他人以前解决过的问题,所以我想知道是否有众所周知的“解决方案”吗? 我现在正在执行的操作不是使用主键作为发票编号(这是理想的选择),而是使用带有发票ID的辅助列,该ID手动增加(使用PHP脚本,但是仍然不是自动的) ),请查看该特定系列的最新发票。 这是我当前的设置: CREATE TABLE `invoices` ( `id` mediumint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, `invoicenumber` mediumint unsigned NOT NULL, `branch` enum('A','B') NOT NULL, `date` date NOT NULL, `client` varchar(100) NOT NULL ) COMMENT='' ENGINE='InnoDB'; 要检查最新发票,我运行: SELECT MAX(invoicenumber+1) AS new_invoice_number FROM invoices WHERE branch = 'A'

3
如何创建用户定义的聚合函数?
我需要一个MySQL不提供的聚合函数。 我希望它具有MySQL的SQL风格(即不是C语言)。 我该怎么做呢?我所坚持的是创建一个聚合函数-这些文档似乎没有提到它是如何完成的。 所需的product功能用法示例: mysql> select product(col) as a from `table`; +------+ | a | +------+ | 144 | +------+ 1 row in set (0.00 sec) mysql> select col, product(col) as a from `table` group by col; +-----+------+ | col | a | +-----+------+ | 6 | 36 | | …

6
在这种情况下最佳的数据库设计是什么?
我正在为我的公司构建业务应用程序,并努力为特定情况选择最合适的数据库设计。假设我有以下实体: 批准书 ID 状态 ... 批准评论 ID ApprovalId 评论 订购 ID ... 发票 ID ... 显然,可能存在多种类型的批准和多个需要批准的对象。设计表时,以下选项中最合适的是: 选项1 有一个带有空外键的批准表: 批准书 编号PK 状态 OrderId FK NULL InvoiceId FK NULL 批准意见 编号PK ApprovalId FK 评论 在这种情况下,我必须为每个需要批准的对象添加一列 选项2 有一个带有公共字段的父审批表,以及每个需要审批的对象的子表: 批准书 编号PK 状态 批准意见 编号PK ApprovalId FK 评论 订单批准 ApprovalId PK FK OrderId FK 发票审批 …

1
在DB2中绑定到底是什么?
最近,我从成为Java开发人员过渡到了公司中的实际DBA。可以这么说,我正在学习成为一名DBA(实际上对我们公司来说是一个新职位)。 我已经看到了几个运行命令的脚本DB2 BIND bind_file other_parameters。 这些功能使我感到困惑。我曾问过我们其他的DBA,但他们无法以合理的方式向我解释。我已经在IBM的Information Center中查看了BIND命令,但是我也不清楚。 我知道绑定在某种程度上很重要,因为我们应该定期对数据库运行REORGS,STATS和BIND,以提高性能。 由于我仍然是n00b DBA,所以我想知道是否有人可以提供“什么是傻瓜绑定?” 说明? 编辑:在以下答案的版本中,我最近遇到了以下developerWorks文章:“ DB2软件包:概念,示例和常见问题:了解DB2系统和用户应用程序软件包”。非常有帮助。特别是对于系统包,这是我们经常遇到的问题。 20130905编辑:DB2 DBA Ember Crooks的这篇博客文章在绑定及其含义方面非常出色。她还写了一篇关于找不到软件包的条目,以及何时增加绑定的CLIPKG编号以及这的含义。这些文章得到了很好的解释。如果存在这种情况,基本上就像阅读“ DB2傻瓜绑定和软件包”。
8 db2 


2
如何使联合视图更有效地执行?
我有一个大表(上千万个记录),出于性能原因,我们将其拆分为活动表和存档表,使用直接字段映射,并每晚运行一个存档过程。 在代码的几个地方,我们需要运行结合了活动表和归档表的查询,这些查询几乎总是被一个或多个字段过滤(我们显然已经在两个表中都添加了索引)。为了方便起见,有如下视图是有意义的: create view vMyTable_Combined as select * from MyTable_Active union all select * from MyTable_Archive 但是如果我运行类似的查询 select * from vMyTable_Combined where IndexedField = @val 在使用过滤之前,它将对Active和Store中的所有内容进行合并@val,这会降低性能。 是否有任何巧妙的方法可以使并集的两个子查询@val在创建并集之前查看每个过滤器? 或者,也许您会建议采用其他方法来实现我的目标,即一种简单有效的方法来获取由索引字段过滤的联合记录集? 编辑:这是执行计划(您将在这里看到实际的表名): 奇怪的是,活动表实际上使用了正确的索引(加上RID查找?),但是归档表正在执行表扫描!

2
使用快照隔离功能,SQL Server数据库写入速度是否变慢?
我的系统中发生了很多僵局。 我想使用快照隔离来修复它们,但是我的DBA对此有保​​留。 他的关注点之一是快照隔离会减慢写入速度。这是因为它必须先写入缓存,然后再写入TempDb(行版本),然后才能返回到调用方。 “正常”写入可以只写入高速缓存,然后完成。 这是行版本控制的工作方式吗?还是比这更复杂?是否以某种方式并行执行这些操作? 还是快照隔离的写入速度较慢?

3
从SQL Server 2000升级到SQL Server 2012的过程
我有一个要升级到SQL Server 2012(在其他服务器上运行)的SQL Server 2000数据库。 我认为没有直接的升级途径,但是如果有的话,那是什么? 我目前的计划是: 备份SQL Server 2000数据库 在安装了SQL Server 2008的服务器上还原 将兼容性级别设置为100(SQL Server 2008 / SQL Server 2008 R2) 从SQL Server 2008服务器备份数据库 在安装了SQL Serevr 2012的服务器上还原 将兼容性级别设置为110(SQL Server 2012) 我在执行不必要的步骤吗?我是否缺少任何内容(例如运行实用程序来识别不受支持的Transact-SQL的用法)?

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.