数据库管理员

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

1
设计用于需求预测分解的简单方案
我正在做一个简单的数据库设计任务,作为一个培训练习,在这种情况下,我必须针对以下情况提出基本的架构设计: 我具有产品的父子层次结构(例如,“原材料”>“在制品”>“最终产品”)。 在每个级别下订单。 在接下来的6个月内,应在每周的存储桶中查看订单数量。 可以针对每个产品级别进行需求预测。 未来6个月内任何一周的需求预测都可以在今天完成。 未来6个月将对每周的水桶进行需求预测。 需求预测通常在层次结构的较高级别(原始物料或在制品级别)进行,必须将其分解为较低级别(最终产品)。 有两种方法可以将需求预测从较高级别分解为较低级别: 用户指定最终产品的百分比分布。假设有一个正在进行的工作的1000的预测..用户说我要在存储区10中为最终产品1分配40%,为最终产品2分配60%。然后从现在开始第10周(星期日至星期六),预测值最终产品1的价格为400,最终产品2的价格为600。 用户说,只需根据针对第5个桶中的最终产品下达的订单进行分解,而第5个桶中第1个产品和第2个产品的订单分别为200和800,则EP1的预测值为((200/1000)* 100)%对于EP2,将是“进行中的工作”预测的((800/1000)* 100)%。 在接下来的6个月中,应可以按周的时段查看预测,理想的格式应为: product name | bucket number | week start date | week end date | forecast value | created_on PRODUCT_HIERARCHY表可能如下所示: id | name | parent_id __________________________________________ 1 | raw material | (null) 2 | work in progress …

2
为档案进行碎片整理/压缩数据库的最佳方法
我们有一个用于电子邮件归档的SQL Server实例(由第三方归档软件包提供)。每隔一段时间,该软件就会被转移到一个新的空数据库中。我们过去每个季度都会做一次,但现在希望每月进行一次。每月要存档的数据量约为15-20 GB,并且大部分数据仅存储在少数几个表中(通常为2-4个)。 一旦我们转到新的数据库,旧数据库就会严格用作只读数据库。我想做的是将其优化为一个美观,紧凑的数据文件,所有表/索引都相邻并且具有很高的填充系数,并且数据文件末尾没有太多的空白空间。另外,我们在此服务器上使用标准版,但存在所有限制(否则,我将已经在使用数据压缩)。 我能想到的几种可能性: 重建/重新组织索引,DBCC SHRINKFILE(好吧,这不是一个明智的选择,因为DBCC SHRINKFILE会将小便从它接触的任何部分中剔除掉,​​但出于完整性考虑,我将其包括在内。) 创建一个新数据库并关闭自动统计。编写脚本并从源数据库重新创建所有表。使用bcp以集群键顺序将数据导出/导入到新数据库中。编写脚本并重新创建所有索引。使用全面扫描重新计算所有统计信息。 创建一个新数据库并关闭自动统计。编写脚本并从源数据库重新创建所有表。使用SSIS或T-SQL将数据传输到新数据库。编写脚本并重新创建所有索引。使用全面扫描重新计算所有统计信息。 在每种情况下,最后一步都是将数据库设置为只读模式。 还有什么其他好的/更好的选择呢?我的担心是以逻辑上连续的方式移动数据,以保留高填充因子。 编辑: 我应该提到,大约75%的数据似乎存储在图像(LOB)列中。

1
导入时转储的mysql表替换了现有记录
我使用mysqldump进行了转储。 mysqldump -u... -p... mydb t1 > mydb_table.sql 然后,我将转储导入到另一个具有相同表但记录不同的数据库中。 mysql -u...-p... mydb < mydb_tables.sql 导入数据库的记录从primary_key 1到1000,导出数据库的记录从5000到10,000。 但是在导入时,现有记录(即1到1000)被删除了。 怎么样??为什么??如果它是默认行为,那么我可以给转储提供哪些选择,以免下次发生。

1
如何列出所有获得赠款的用户
我正在寻找一些查询,以列出对某个软件包有资助的所有用户。 例如,已授予用户Schema_A执行包:B.MyPackage。 我正在查询视图或表,例如:role_tab_privs,role_sys_privs,sys.dba_sys_privs,dba_role_privs ...,但找不到所需的内容。

2
增加的RAM,性能更差
设定: Windows Server 2008 R2 SQL Server 2008 R2 SP1 240GB RAM TempDB是8x16GB数据文件,没有自动增长(总共128GB) 物理/独立服务器 该服务器用于ETL处理。我们刚刚在此服务器上安装了更多RAM,总共有240GB RAM。SQL Server服务是唯一可运行的东西。 内存在BIOS,OpenManage和Windows中显示正常。 如果我将SQL Server配置为使用最小/最大70 / 100GB内存,则没有问题。但是,一旦将其增加到120 / 150GB,则在运行我们的ETL进程之一时会出现以下错误: 无法为数据库“ tempdb”中的对象“ <临时系统对象:422234507706368>”分配空间,因为“ PRIMARY”文件组已满。通过删除不需要的文件,在文件组中删除对象,向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。(消息1105,状态2,过程未知,第1行) 在更改内存配置之前,我们从未遇到过此问题。重新配置回原始的70 / 100GB后,我们不会收到此错误。 我尝试过的事情: 将TempDB数据文件设置为自动增长。这只会导致文件自动增长,直到达到磁盘容量,然后失败。 添加更多的TempDB数据文件。与显示的错误相同。 将TempDB的大小增加到8x32GB(总共256GB) 我对可能导致此问题的原因不知所措。

5
高效地过滤带析取的大集合
假设我只有一张桌子 CREATE TABLE Ticket ( TicketId int NOT NULL, InsertDateTime datetime NOT NULL, SiteId int NOT NULL, StatusId tinyint NOT NULL, AssignedId int NULL, ReportedById int NOT NULL, CategoryId int NULL ); 在此示例中TicketId是主键。 我希望用户能够针对此表创建“部分即席”查询。我之所以说是部分原因是因为查询的某些部分将始终固定: 该查询将始终对 InsertDateTime 查询将始终 ORDER BY InsertDateTime DESC 查询将分页结果 用户可以选择对其他任何列进行过滤。它们可以过滤一个,一个或多个。并且对于每个列,用户可以从一组值中进行选择,这些值将被用作析取。例如: SELECT TicketId FROM ( SELECT TicketId, ROW_NUMBER() …

2
在什么时候索引有效
我发现很多资源都提到向表中添加索引可以加快搜索速度,并降低插入速度,但前提是表很大。这会产生一个折衷,这是一个设计决定,但是应该有一个近似的表大小,然后才可以使用索引。(例如,十行可能低于该限制) 是否有人知道此限制在哪里,或者知道有什么资源可以向我指出正确的方向?

2
SQL Server作业中的事务和try-catch
在SQL Server作业的每个步骤中,我们都有DML操作。为了确保更新/插入的情况下将回滚不顺心的事,我已经包裹的数据修改的每一步中TRY CATCH和TRANSACTION块: BEGIN TRY BEGIN TRANSACTION [[INSERT/update statements]] ... IF @@TRANCOUNT > 0 BEGIN COMMIT TRANSACTION PRINT 'Successful.' END END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage IF @@TRANCOUNT > 0 BEGIN ROLLBACK TRANSACTION …

3
SQL Server泄漏的事务
我有一个大约50个客户端通过TCP的TDS访问的数据库,该数据库似乎没有释放日志空间。进程的数量保持在预期的50左右,其中一些进程的寿命很长(> 120天)。 现在,数据库的日志空间为40 gb(仅包含14 gb数据),空闲空间为39 gb。由于驱动器上的空间限制,我想缩小到更合理的大小(10gb-ish)。当我执行时DBCC SHRINKFILE('db_log', 10000),它返回一个错误,表示正在使用日志末尾。 为了释放对日志结尾的访问,我尝试通过以下方式将数据库置于单用户模式: ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO ALTER DATABASE db SET MULTI_USER GO 但脚本返回的消息重复了数百次: Nonqualified transactions are being rolled back. Estimated rollback completion: 100%. 这使我相信,在某个地方,我没有进行某些事务。我不知道有什么过程会故意一次打开这么多交易,因此我认为它们必须随着时间的推移而积累,永远不要关闭。 问题:如何找到有问题的进程或脚本,或者为什么不发布日志? sys.dm_tran_active_transactions显示了合理的18笔交易,目的可以理解。 sp_who仅显示我知道的过程。 SQL Server版本: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) …

4
将行从一个表移动到另一个表
作为归档过程的一部分,我正在将记录从一个数据库移动到另一个数据库。我想将这些行复制到目标表,然后从源表中删除相同的行。 我的问题是,在删除行之前检查第一个插入是否成功的最有效方法是什么? 我的想法是这样,但是我觉得有更好的方法: @num_records=select count(ID) from Source_Table where (criteria for eligible rows) insert * into Destination_Table where (criteria for eligible rows) if ((select count(ID) from Destination_Table where (criteria) )=@numrecords) delete * from Source_Table where (criteria) 将它与RAISERROR函数结合起来更好/可行吗?谢谢!

2
MySQL二进制日志-跳过表
有没有办法跳过二进制日志中的特定表? 我已将二进制日志配置为夜间备份之间的增量备份策略。但是,我们有一个巨大的参考表,我们将从批处理过程中每晚进行更新(70GB表)。该表仅被读取,并且每晚使用进行更新mysqlimport。 在此仅供参考的表的更新过程中,二进制日志会导致相当严重的延迟(尤其是当我执行完整的70GB更新时)。基本上必须做两次70GB。y 参考表当前正在使用MyISAM(我选择了InnoDB尝试加载它,因此尝试使用MyISAM)。
9 mysql  logs  binlog 

1
MongoDB没有使用所有可用的RAM
我在mongo集群中存储了大约200 GB的数据。运行mongo的实例之一上的物理内存为8GB。没有任何其他后果在此实例上运行。据我所知,根据Mongo的文档(例如:http : //www.mongodb.org/display/DOCS/Checking+Server+Memory+Usage),这意味着mongod进程应使用约100%的可用的物理内存。但是,如果您查看top命令的以下输出,您会发现mongod实例仅使用2GB的常驻内存,并且有2GB的可用物理内存完全可用,根本没有使用。 有人可以向我解释这种行为吗?为什么会有2GB的可用内存? top 输出: top - 23:19:43 up 89 days, 20:05, 2 users, load average: 0.41, 0.55, 0.59 Tasks: 101 total, 1 running, 100 sleeping, 0 stopped, 0 zombie Cpu(s): 2.0%us, 1.3%sy, 0.0%ni, 93.9%id, 2.6%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 8163664k total, 6131764k used, 2031900k free, 54976k buffers …
9 mongodb  memory 

2
如何设置和获取自定义数据库变量?
使用“ PGAdmin III我”可以右键单击数据库,导航到Variables选项卡,然后在数据库本身上放置变量name-value属性。有没有办法自定义这些?我看到了一个application_name变量,但是我想要一个application_version变量。

2
案例与虚无与融合
我正在阅读SQL Server 2012考试的文档,发现了以下几点: 案例与虚无与融合 现在,我知道如何使用每个,但不知道何时使用。请可以澄清一下。谢谢。 附言 请给我们一个考试题标签吗?

1
如何修复SQL Server程序集优化错误和内存耗尽?
mscorsvw自从我安装SQL Server 2012 Service Pack 1以来,.NET运行时优化服务()一直消耗着我所有工作站的内存。 在耗尽所有可用内存之前,它将消耗约1.6 GB的内存: 我可以取消该过程,但是当我重新启动计算机或等待足够长的时间后,它会再次发生。 Techdows建议使用.NET本机图像生成器(ngen)解决问题。 我取消了命令提示符并运行了以下命令: cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319.1 ngen executeQueuedItems 内存消耗mscorsvw下降到大约20-30 MB,并ngen消耗了所有剩余的内存。 ngen仅生成错误消息,直到我终止了该过程。输出的前几行如下所示: Microsoft (R) CLR Native Image Generator - Version 4.0.30319.1 Copyright (c) Microsoft Corporation. All rights reserved. Failed to load dependency Microsoft.DataWarehouse of assembly Microsoft.SqlServer.MaintenancePlanTasks, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 because of the following error …

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.