数据库管理员

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

3
为什么我的.my.cnf设置不起作用?
我的桌面上的主目录中有一个.my.cnf文件,该文件包括: [dbid] user = myusername password = mypassword database = dbname host = server.location.com 如果我没记错的话,在从Ubuntu 10.04升级到11.04之前,我能够使用以下命令 mysql dbid 直接连接到数据库 但是今天我得到了这个错误: ERROR 1049 (42000): Unknown database 'dbname' 我做错什么了吗?


3
加快将MyISAM转换为InnoDB的速度
我有一个带有约450个表的数据库的mysql 5.1服务器,占用4GB。这些表中的绝大多数(除2个以外的所有表)都是MyIsam。这在大多数情况下都很好(不需要事务),但是应用程序一直在增加流量,并且某些表由于更新上的表锁定而受到影响。这就是表中的2个现在是InnoDB的原因。 较小的表(10万行)上的转换根本不需要花费很长时间,从而导致停机时间最少。但是,我的一些跟踪表接近5000万行。有没有一种方法可以加快ALTER TABLE...ENGINE InnoDB大桌子的摆放速度?如果不是,是否有其他方法可以在这些写繁重的表上进行转换以最大程度地减少停机时间?

2
10 TB数据库备份/还原问题
我们有一个非常大的生产数据库,它是10 TB。我们正在考虑将其迁移到云服务,但是我必须了解风险并估计整个过程的持续时间。我使用本机SQL Server 2014 SP2备份解决方案每月备份一次数据库。持续时间将近720分钟-12小时。压缩率为5,这意味着备份大小几乎为2 TB。我们无法负担差异备份的费用,因为它们的累积时间和空间与完整备份一样多,因此我们进行T日志备份(每个约200 Mb),而不是每天每10分钟〜144个文件。BIG的问题是拥有所有这些统计信息,是否有人知道恢复包含10 TB数据的2 TB备份需要多长时间?它会比完整备份持续时间长得多吗?

1
在INSERT上使用WITH TABLOCK的好处
在某些情况下,INSERT INTO <tablename> (WITH TABLOCK)由于记录最少,因此执行操作会更快。这些情况包括将数据库包含在BULK_LOGGED恢复模型中。 当数据库(tempdb)使用恢复模型时,在空表上使用WITH TABLOCKon 还有其他潜在的性能优势吗?INSERTSIMPLE 我正在使用SQL Server 2012 Standard Edition。 我的用例是使用来创建然后立即在存储过程中填充临时表INSERT...SELECT,该表可能包含多达几百万行。我尝试避免这种tempdb滥用,但是有时是需要的。 我正在尝试建立一个需要的案例TABLOCK。似乎它不会伤害任何东西,并且可能会有好处。我试图弄清楚是否有足够的潜在优势可以将其添加到我们整个代码库中的任何位置,我敢肯定没有其他进程要写到表中。 我通常将其插入具有群集PK的新创建的本地临时表中,但有时会使用堆。

2
为什么我的索引未在SELECT TOP中使用?
总结:我正在执行选择查询。WHEREand ORDER BY子句中的每一列都在单个非聚集索引中IX_MachineryId_DateRecorded,可以作为键的一部分,也可以作为INCLUDE列。我选择了所有列,因此将导致书签查找,但我只是在考虑TOP (1),因此可以肯定的是服务器可以告诉查找,最后只需要执行一次。 最重要的是,当我强制查询使用index时IX_MachineryId_DateRecorded,它在不到一秒钟的时间内运行。如果我让服务器决定使用哪个索引,它将选择IX_MachineryId,最多需要一分钟。这确实向我表明,我已正确编制了索引,而服务器只是在做出错误的决定。为什么? CREATE TABLE [dbo].[MachineryReading] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Location] [sys].[geometry] NULL, [Latitude] FLOAT (53) NOT NULL, [Longitude] FLOAT (53) NOT NULL, [Altitude] FLOAT (53) NULL, [Odometer] INT NULL, [Speed] FLOAT (53) NULL, [BatteryLevel] INT NULL, [PinFlags] BIGINT NOT NULL, [DateRecorded] DATETIME NOT …

1
varchar(n)的开销是多少?
我想从Postgres文档中询问有关varchar(n)类型的片段的含义: 短字符串(最多126个字节)的存储要求是1个字节加上实际的字符串,其中包括在字符情况下的空格填充。较长的字符串的开销为4个字节,而不是1个字节。 假设我有一个varchar(255)字段。现在,以下语句: 如果此字段包含10个字节的字符串,则开销为1个字节。因此该字符串将使用11个字节。 如果该字段使用140个字节保存字符串,则开销为4个字节。因此该字符串将使用144个字节。 以上这些陈述是正确的吗?这里有人理解文档相同的方式,我不过这里有人指出的开销总是4个字节在这里?


2
为什么在视图中将NOT NULL计算列视为可为空?
我有一张桌子: CREATE TABLE [dbo].[Realty]( [Id] [int] IDENTITY(1,1) NOT NULL, [RankingBonus] [int] NOT NULL, [Ranking] AS ([Id]+[RankingBonus]) PERSISTED NOT NULL .... ) 和一个视图: CREATE View [dbo].[FilteredRealty] AS SELECT realty.Id as realtyId, ... COALESCE(realty.Wgs84X, ruian_cobce.Wgs84X, ruian_obec.Wgs84X) as Wgs84X, COALESCE(realty.Wgs84Y, ruian_cobce.Wgs84Y, ruian_obec.Wgs84Y) as Wgs84Y, realty.Ranking, ... FROM realty JOIN Category ON realty.CategoryId = …

1
日期范围的唯一性约束
考虑具有prices以下列的表: id integer primary key product_id integer -- foreign key start_date date not null end_date date not null quantity integer price numeric 我希望数据库执行以下规则,即在日期范围内(通过where <date> BETWEEN start_date AND end_date)某种产品在特定数量上只能有一个价格。 这种基于范围的约束可行吗?

1
了解通知系统
我一直在研究如何在SE和其他地方构建通知系统,发现自己对解决方案很感兴趣,该解决方案是此处接受的答案:https : //stackoverflow.com/questions/9735578/building-a-notification-system 使用这个结构: ╔═════════════╗ ╔═══════════════════╗ ╔════════════════════╗ ║notification ║ ║notification_object║ ║notification_change ║ ╟─────────────╢ ╟───────────────────╢ ╟────────────────────╢ ║ID ║—1:n—→║ID ║—1:n—→║ID ║ ║userID ║ ║notificationID ║ ║notificationObjectID║ ╚═════════════╝ ║object ║ ║verb ║ ╚═══════════════════╝ ║actor ║ ╚════════════════════╝ 通知是关于某人(演员)更改(动词=添加,请求..)并报告给用户(主题)的某事(对象=事件,友谊..)。这是规范化的数据结构(尽管我使用过MongoDB)。您需要通知某些用户有关更改。因此,这是每位用户的通知。这意味着,如果有100位用户参与,您将生成100条通知。 起初我以为我了解这种方法,但是当我准备开始实施它时,我意识到我显然不太了解它。关于答案的最后几条评论是来自其他用户的问题,这些用户也难以理解解决方案。 我不确定这是否是我最终会遵循的模型,但是鉴于它所拥有的支持者数量,我相信这对我有所帮助,我当然希望了解更多。我希望这对于其他在掌握该解决方案方面遇到困难的人也将是有用的(顺便说一句,我没有足够的互联网积分就该问题的答案发表评论,其他任何人都可以做!) 问题 如果我理解正确,则notificationObjectID是指向notification_object表的外键,而notificationID是指向通知表的外键。似乎object应该是外键,引用通知所涉及的数据库条目的ID(例如特定事件或发布),但是我们是否不需要另一个字段来指示ID属于哪个表? 作者写道 notification_object.object标识更改类型,例如字符串“ friendship”。我所讨论的对更改对象及其额外数据的实际引用位于notification_change.notificationObjectID中。 这对我来说似乎没有意义。对象是一个字符串(枚举?),notificationObjectID是一个外键,指向通知所针对的对象?那么中间表和右边表是如何连接的呢? 似乎中间表指定了通知涉及的对象(或对象类型),例如事件或帖子。然后,在notification_change中可以有许多条目指向相同的对象类型,这使我们可以捆绑通知(例如“在X的墙上张贴了25位用户”)-因此,中间表和右表之间是1:n关系。 但是为什么左表和中间表之间存在1:n关系?我们是否要给“ 25位张贴在Sam墙上的用户”和“玛丽更新了她的“星期五野餐”事件”使用相同的通知ID?如果同一用户的所有通知都具有相同的通知ID,为什么我们甚至需要剩下? 表演问题-说约翰对玛丽的野餐活动发表评论。在创建notification_change条目之前,我们似乎需要进行查找以查看Mary's Picnic 的notification_object是否已经存在。这会对性能产生负面影响,还是非问题?继续前一段的问题,我们怎么会知道哪个通知条目指向notification_object什么?



2
PostGIS与SQL Server的GIS数据
因此,我最近刚开始在一家新公司工作,有很多ArcGIS用户,他们似乎非常热衷于继续使用PostGIS实例向我们的客户提供一些数据。虽然我对此没有疑问,但我们拥有95%的SQL Server和5%的Oracle商店。我们当前的内部GIS在SQL Server上运行,我还没有收到任何投诉。 我知道SQL Server截至2012年已经改善了很多空间/几何功能,但是PostGIS中是否有任何杀手级功能值得引入新平台?我已经尝试进行研究,但是找不到真正深入的东西,或者那不是完全偏见。 我想为他们提供最好的工具来完成他们的工作,但同时也必须权衡一个事实,即我将从一开始就学习Postgres / GIS,这本身就是一个完整的过程。


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.