很多时候,我们都听到了同样的事情。关于在哪里放置 OLAP/OLTP 数据库、在哪里放置tempdb、在哪里放置事务日志等的建议。
但是假设您处于存储的物理定义对您来说是个谜的环境中。换句话说,确保您可以看到逻辑驱动器,并且您可以给系统管理员打电话并要求提供更多空间,但您永远不知道什么是不同的物理驱动器(假设在幕后有 SAN 或 NAS)。如果您实际上不知道这一点,那么您如何通过将受到重创的tempdb数据库放在不同的物理驱动器上来遵循最佳实践?
这方面的最佳做法是什么?
我在这里谈论的版本不是版本控制系统。就像在 SO 中一样,我得到了一些可以进行版本控制的文本数据(将它们与问题进行比较)(在编辑、保存、回滚的意义上)。每次编辑、更新、保存的内容都将根据最终用户的选项保存为新版本。我应该如何为这种任务设计一张桌子?
id pk auto increment
content
parentid defaults to 0
version defaults to 0
Run Code Online (Sandbox Code Playgroud)
id content parentid version
1 Hello World 0 0
2 Hello Doggy 1 1
3 Hello Kitty 1 2
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,父 ID 等于现有 ID 的每条记录都将保存在增量版本中(实际上是在服务器端代码中计算的)。显示在 UI 中,如下所示
1.Hello World
-Hello Doggy(Version1)
-Hello Kitty(Version2)
Run Code Online (Sandbox Code Playgroud)
其中每个都显示为链接,以便可以进行进一步的编辑。事情像预期的一样没有问题,但我们想改进这一点,我认为最好从桌子设计开始。
我的客户不小心从测试数据库中删除了一个表的所有记录。此测试数据库位于 SQL Server 2005 Express 中,我们没有备份。
是否可以从事务日志 (.ldf) 文件中恢复已删除的行?如果是,如何?
在 MS SQL Server 2005 中,如何提取给定列的 NULL 分数(或 NULL 计数)的统计信息?
Oracle 和 PostgreSQL 中也有同样的信息,听说 MS SQL 也有统计数据,但不知道在哪里可以找到。谷歌没有多大帮助。
我希望我会听到类似的话
SELECT null_frac FROM pg_stats WHERE tablename='mytab' and attname='mycol';
/* PostgreSQL, stats gathered by ANALYZE */
Run Code Online (Sandbox Code Playgroud)
或者
SELECT nullcnt FROM custom_stats_table WHERE tabname='MYTAB' and colname='MYCOL';
/* Oracle, stats gathered by dbms_stats.get_column_stats */
Run Code Online (Sandbox Code Playgroud)
我不是在问如何自己计算这些值——我知道该怎么做。我需要数千列的这些统计信息,并且在我正在处理的数据库上计算这将花费很长时间。我需要近似值,它们应该在服务器中的某个地方 - 基于成本的优化器无论如何都需要它们。
我正在处理一个相当大的 SQL Server 数据库并遇到一些问题。
数据库很新,我一直在将数据导入表中,这使整个服务器运行得很慢。数据库现在是 15GB,例如在 1 个表中它只有 4 列,但有 1.22 亿行,占用了 3.5GB。另一个表大约有 35 列,300 万行,占用大约 1.5GB。
每当我打开一张大表,或开始在我的 MVC3 应用程序中使用它时,它几乎使服务器瘫痪;内存使用量达到最大值,它开始运行非常缓慢。(服务器规格:奔腾双核 E6300 2.8GHz,2GB RAM,Windows 2008,SQL Server 2005,一张磁盘)。
这确实是我第一次处理如此大量的数据,因此一直在添加索引以尝试加快速度,但是一旦内存达到最大水平,我必须重新启动服务器才能使其正常工作正常的速度。
无论如何,我不觉得 15GB 有那么大——2GB RAM 肯定可以处理吗?我什至还没有完成第一轮数据的添加,所以它会变得更大。
有没有人对如何更好地设置和提高效率有任何建议。所有 PK's 和 FK's 都已经设置好,我已经在大表中添加了索引,看看这是否有帮助,但它最终又开始慢慢变慢了。顺便说一句,在数据库属性中,它显示“可用空间 - 1596.96MB”你如何增加这个数字?
我有一个包含以下列定义的表:
ID (INT, PK)
Name (VarChar)
Active (Bit)
Bunch_of (Other_columns)
Run Code Online (Sandbox Code Playgroud)
问:我想有一个约束Name/Active,使得我们只能有1条记录与给定的Name是Active(Active= 1),但我们也能有同样的多条记录Name是Inactive(Active= 0)。这可能吗?
我已经尝试了普通的 Unique 约束,但它们将数据集限制为仅允许 1 条记录的给定Name为Inactive.
我们似乎遇到了一个莫名其妙的问题。检查点进程卡在 SLEEP_BPOOL_FLUSH 状态,并没有真正减少日志文件中的使用。
这在以前似乎从未发生过。
我知道 SLEEP_BPOOL_FLUSH 是磁盘子系统繁忙时对 CHECKPOINT 进程的正常等待。实际上,我们一直有一个非常繁忙的磁盘子系统,所以我不明白为什么这会成为一个问题。
(如果您手动运行检查点命令,同样的结果...您的用户进程在 SLEEP_BPOOL_FLUSH 中等待)。
我们可以做些什么来推动检查点发生?是否可以调整检查点的参数以免发生这种情况?
(SQL Server 2005,RAID 子系统,简单恢复模型)
我通常可以使用生成脚本/ DTS 来移动数据和表等。但是,其中一个数据库有大量的加密程序,我无法通过脚本来移动它们。
我也没有旧的 2005 年数据库备份。
我没有手动恢复解密程序。
有什么办法可以复制/移动它们吗?
我们似乎在使用索引的查询上有非常不寻常的糟糕性能。例如表格看起来像
所以我们需要在数据库中插入一行,然后在 ID 上查找。但是第三方拥有的 ID 和我们有 PK。我们需要拿回PK。但是这些 ID 中很大一部分具有非常相似的起始值。例如
我不确定 SQL Server 是如何遍历 BTree 的,如果它从最左边的位置开始对值进行哈希处理或进行字符串比较。
在查询这些值时,具有非常大范围的非常相似的值(至少前 4 个字符是相同的)是否会导致索引性能不佳?
更新:
抱歉,查找查询是
SELECT PK_Column FROM table WHERE ID = @ID
Run Code Online (Sandbox Code Playgroud)
标记要求:
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time:
CPU time = …Run Code Online (Sandbox Code Playgroud) index sql-server-2005 sql-server-2008 sql-server sql-server-2008-r2
有没有办法计算全文搜索目录所需的物理驱动器空间?空间很便宜,但我想知道我在做什么。
我正在查看一个包含大约 200 篇长度不等的文章的表格。我想索引标题字段和文章的正文。
更新: 我有点想预测未来。例如200篇文章,标题是varchar(500),文章正文是varchar(max)。那么,在不创建索引的情况下,是否可以估算全文搜索目录的大小?
sql-server-2005 ×10
sql-server ×8
index ×2
checkpoint ×1
constraint ×1
disk-space ×1
performance ×1
recovery ×1
statistics ×1
storage ×1