数据库管理员

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

2
如何防止每日索引碎片达到99%
我有一个供100.000名玩家使用的高分桌,每天被插入2次,每位玩家有一条记录。最终,该表中索引的索引碎片为99%。有没有办法通过调整设置来防止这种情况? CREATE TABLE HighScore( [id] [int] IDENTITY(1,1) NOT NULL, [user] [int] NULL, [player] [int] NULL, [round] [tinyint] NULL, [group] [int] NULL, [rank] [int] NULL, [delta] [int] NULL, [roundpoints] [int] NULL, [totalpoints] [int] NULL, PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS …

1
将FLOAT与RAISERROR一起使用
我一直RAISERROR()在提供一些基本的单元测试功能(如此处所示),但是对于无法FLOATs在错误消息中使用感到沮丧。我知道我可以将float转换为字符串,但是我RAISERROR在每个单元测试中都在使用,我不想为每个测试添加另一行代码。(我的单元测试已经足够罗word了!)是否可以在参数列表中执行内联转换/转换RAISERROR?还是有解决这种缺陷的另一种方法? 更新: 所以最终我希望我能做的是: RAISERROR('Unit Test FAILED! %f', 11, 0, @floatParm) 不幸的是,RAISERROR通常不处理%f或浮点数。所以我必须这样做: DECLARE @str VARCHAR(40) = CAST(@floatParm AS VARCHAR(40)) RAISERROR('Unit Test FAILED! %s', 11, 0, @str) ...分散在数十个单元测试中时,看起来就像一团糟。因此,我想将其归结为以下内容: RAISERROR('Unit Test FAILED! %s', 11, 0, CAST(@floatParm AS VARCHAR(40)) 但这使我得到了Incorrect syntax near 'CAST'信息。我不明白为什么这是违法的,但是确实如此。我可以在这里使用另一个“衬板”吗?
11 sql-server  t-sql 

1
InnoDB INSERT性能的功能
嗨,我正在运行Percona Server的最新版本。 服务器版本:5.5.24-55 Percona服务器(GPL),版本26.0 我有这些特征的10 cpu盒。 processor : 0 vendor_id : AuthenticAMD cpu family : 16 model : 9 model name : AMD Opteron(tm) Processor 6128 stepping : 1 microcode : 0x10000d9 cpu MHz : 800.000 cache size : 512 KB 它具有SSD和64GB RAM。Innodb大约为10GB,因此innodb_buffer_pool_size设置为10GB。 我有一张桌子,如下所示: create table TODAY ( symbol_id integer …

1
使用MoveFile API对SQL Server数据和日志文件进行碎片整理
我的雇主正在考虑部署使用Windows MoveFile API对打开的文件进行碎片整理的NTFS碎片整理软件。它将部署到运行2005-2012年的SQL版本以及2003和2008 R2的Windows版本的数千台SQL Server服务器中。如果重要的话,我正在谈论的产品是PerfectDisk,但我相信有类似的程序也可以以相同的方式工作。 除了偶尔的I / O性能问题外,到目前为止,测试还没有引发很多问题,这不足为奇,可以通过重新计划和调整碎片整理来解决。但是,我更担心数据损坏的风险。 这里有没有人有在数据库服务器上的生产环境中运行此类软件的经验?您是否遇到任何数据损坏? 尽管找不到任何确凿的证据表明存在问题,但我对此感到不安。 感谢您的任何答复。 编辑添加:幸运的是,这个可怕的想法被遗忘了,可能部分是由于我给出的一些警告。

2
试图了解MySQL中的SHOW SLAVE STATUS
我有一个主从复制设置,看起来运行良好。下面是SHOW SLAVE STATUS命令的结果: show slave STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: *.*.*.* Master_User: repliV1 Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 10726644 Relay_Log_File: mysqld-relay-bin.000056 Relay_Log_Pos: 231871 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: data1 Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: …

3
SQL Server 2008中的最大表容量
我有一个应用程序,每年将超过10亿行插入到表中。该表包含一些varchar和bigint列以及一个blob列。 10亿行包含历史数据,这些数据被保留以进行跟踪。因此,我想知道如果我根据有关最大表大小的MSDN文章继续采用这种结构,是否会存在表容量限制。 该链接中提到的数据文件大小是否指向表数据文件组?

1
为什么10 ^ 37/1会引发算术溢出错误?
继续我最近玩大量数字的趋势,我最近将错误归结为以下代码: DECLARE @big_number DECIMAL(38,0) = '1' + REPLICATE(0, 37); PRINT @big_number + 1; PRINT @big_number - 1; PRINT @big_number * 1; PRINT @big_number / 1; 我得到的这段代码的输出是: 10000000000000000000000000000000000001 9999999999999999999999999999999999999 10000000000000000000000000000000000000 Msg 8115, Level 16, State 2, Line 6 Arithmetic overflow error converting expression to data type numeric. 什么? 为什么前三个操作有效,但最后一个无效?如果@big_number可以明显地存储的输出,怎么会有算术溢出错误@big_number / 1?

3
ubuntu中用于mongodb的Upstart脚本
我是linux和mongodb的新手。我已经在ubuntu上安装了mongodb,但是我想在其他端口上再运行一个实例。从其他问题和论坛中了解到,必须有新贵脚本。 /programming/7300109/ubuntu-start-upstart-second-instance-of-mongodb 但是我无法在服务器上找到或找到upstart脚本,如果创建upstart脚本,则应将其定位为服务启动位置。 或者是否有其他适当且简便的方法在同一服务器上但不同端口上启动mongodb的另一个实例。

2
将日期时间列转换为秒数
在我的SQL Server数据库中,有一datetime列。 创建代表long该datetime列值的新列的好方法是什么?在long将表示了若干秒。 我认为,如果可以将其转换为longs,则可以更轻松地按时间段进行分组查询,因为我可以将长整数除以固定数量。 该表是静态的,不会更新或删除数据。

2
作业类别中的任何作业失败时发出警报
是否可以在SQL Server 2008中设置警报,以便在特定类别的作业失败时将发送电子邮件? 我想知道是因为我想在SSRS订阅失败时设置一封电子邮件,并且所有这些订阅都是Report Server类别中的作业。 编辑 -事实证明,当SSRS订阅失败时,作业本身不会失败,因此我的问题将不适用于SSRS订阅监视。但是我仍然想知道我们在环境中运行的其他工作

2
MongoDB副本集次要卡在“ ROLLBACK”状态
在我们的mongodb的最近一次自动更新过程中PRIMARY,当PRIMARY卸任时它永久进入ROLLBACK状态。 在该ROLLBACK状态下几个小时后,mongodb数据库目录.bson中的rollback目录中仍然没有回滚文件。那以及我们日志文件中的这一行:[rsSync] replSet syncThread: 13410 replSet too much data to roll back似乎表明该ROLLBACK过程失败了。 我想帮助您分析到底出了什么问题。 在我们的日志中似乎发生了两种不同的回滚。是这种情况还是花了3个小时? 如果第一次回滚成功(在19:00时)成功,为什么ou rollback目录中没有出现任何内容? 对所有这些警告的起因有任何猜测吗?可能与回滚失败有关吗? 我们是否由于第一次丢失了18秒的数据ROLLBACK? 是否有解决“卡在ROLLBACK状态”问题的通用解决方案?我们最终不得不使用整个数据库,并从主数据库重新同步。 相关的日志行是: # Primary coming back after restart... Tue May 15 19:01:01 [initandlisten] MongoDB starting : pid=3684 port=27017 dbpath=/var/lib/mongodb 64-bit host=magnesium Tue May 15 19:01:01 [initandlisten] db version v2.0.5, pdfile version 4.5 …
11 mongodb  rollback 

2
有没有一种基于集合的方式来加载/读取带有HierarchyId的树枝
我正在玩HierarchyId,但还没有想出一种基于集合的方法来执行以下操作: 一次插入所有子树 一次检索所有子树 这个问题与我的上一个问题有关,我怀疑用HierarchyId完成这两项任务的唯一方法是一次一个节点或一个级别。如果我使用的是物化路径,则可以通过一个(且不重要的)基于集合的命令轻松地完成这两个动作。 我想念什么? 编辑:我也错过了一种移动子树的方法,但我从Mikael Eriksson的评论中学到了

5
SQL事件探查器会影响服务器性能吗?
我遇到了一个问题,其中sql server 2008因某些高负载而失败。我需要找到这种负载情况,并需要优化代码以使其能够处理负载。我在互联网上发现,SQL事件探查器可用于跟踪数据库交互,然后可以对其进行分析以找到问题发生的确切点。我还发现了如何启动sql profiler。但是现在我的问题是,通过启动sql profiler,我是否会影响服务器性能?

3
通过T-SQL以编程方式引用数据库
我正在编写一个存储过程,该过程使用数据库名称作为参数并返回该数据库的索引及其碎片级别的表。该存储过程将存在于我们的DBA数据库(该DB包含DBA用于监视和优化事物的表的数据库)中。如果有所不同,那么所讨论的系统都是SQL Server 2008 R2。 我已经解决了基本查询,但是一直试图提供索引的实际名称。据我所知,该信息包含在每个人的sys.indexes视图中。我的特定问题是尝试以编程方式从另一个数据库的存储过程中引用该视图。 为了说明这一点,这是有问题的查询的一部分: FROM sys.dm_db_index_physical_stats(@db_id,NULL,NULL,NULL,NULL) p INNER JOIN sys.indexes b ON p.[object_id] = b.[object_id] AND p.index_id = b.index_id AND b.index_id != 0 从@db_id标识的数据库执行查询时,查询工作正常,因为它使用了正确的sys.indexes视图。但是,如果我尝试从DBA数据库中调用它,则所有结果都将为null,因为sys.indexes视图用于错误的数据库。 一般而言,我需要能够执行以下操作: DECLARE @db_name NVARCHAR(255) = 'my_database'; SELECT * FROM @db_name + '.sys.indexes'; 要么 USE @db_name; 我尝试使用字符串连接和OBJECT_NAME / OBJECT_ID / DB_ID函数的组合切换数据库或引用其他数据库,但似乎没有任何效果。我会感激社区可能有的任何想法,但是怀疑我将不得不重新构建此存储过程以驻留在每个单独的数据库中。 在此先感谢您的任何建议。
11 sql-server 

6
重启服务器后,防止在Innodb数据库中重置auto_increment id
我最近读到,由于服务器重启时InnoDB如何重新计算AUTO_INCREMENT值,所以ID列表高端上的任何记录都可能重用了它们的ID。 通常,这不是问题,因为删除用户后,与ID关联的所有内容也会从其他表中删除。 但是,我故意将他们的论坛帖子保留为孤立状态,标记为“由= User#123 =“发表”,以便保留过去的对话。显然,如果ID被重用,这将是一个问题。 我以前从未遇到过此问题,因为总是有足够的新用户,因此不太可能以这种方式重复使用ID。但是,在我的新项目中,注册很少,并且频繁删除不活动的用户(尤其是因为“ Open Alpha”帐户仅持续三天作为预览),这种ID重用现在已经发生了三分之三。 我通过在其他位置保存AUTO_INCREMENT的正确值并使用它而不是依赖内部值来“解决”该问题。有实际的方法让InnoDB记住实际的上一个值吗?
11 mysql  innodb 

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.