由于所有写入和顺序读取均由EMC 存储系统缓存,因此固态磁盘的最佳用途是存储具有随机读取模式的数据。在 Oracle 上,这是用于无法放入内存的磁盘排序的临时表空间。如何隔离以随机磁盘读取模式为特征的 MySQL 部分?
这里澄清了我的原始问题:这是一个具有非常大的表、大量排序等的报告数据库。无法放入服务器内存中。
这是一个与标题几乎相同的问题不同的问题。
同样,这比我需要更改的任何内容更令人好奇 Oracle 数据库的工作原理(是的,我知道多个范围很好,我也读过 Tom Kyte)。
我有一张具有以下特征的表:
Initial Ext: 1.44GB
Next Ext: 1MB
Num Extents: 26
Size: 4.18MB
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我通过扫描 10% 的表行来获得大小。初始盘区大小如此之大,而数据如此之低,如何添加更多盘区?我确信桌子没有变大,然后又急剧缩小。
谢谢你。
通过SECUREFILE存储,我可以指定是否需要压缩(及其级别)和重复数据删除,这完全是时间和空间之间的权衡。
时序相当容易分析,但要对特定 LOB 列占用多少空间进行合理准确的测量,最简单的方法是什么?
在物理硬件上运行 SQL Server 时,将数据库数据和日志文件放在单独的磁盘或 RAID 阵列上可以提高性能、弹性和维护。在单独的物理磁盘和 RAID 阵列上对数据库进行分区也是一种选择。简单地说,更多的锭子更好。
当 SQL Server 在虚拟环境中运行时,主轴的概念应用不同。您通常几乎无法直接控制虚拟磁盘映射到的物理磁盘。这是否意味着对数据库进行分区或将数据和日志文件拆分到单独的虚拟磁盘上是没有意义的,就像我们对物理磁盘所做的那样?
我了解对仍然适用于虚拟环境的数据库进行分区还有其他原因。例如,大的只读表可以在一个单独的分区中,只需要备份一次,但这不是本文的主题。
performance sql-server storage partitioning virtualisation query-performance
升级到 MySQL 5.7 后,执行 SQL 查询会填满可用存储空间。
升级是通过 AWS 控制台执行的,选择自动程序将 RDS 从 MySQL 5.6.27 升级到 MySQL 5.7.11。但是,在 mysql5.6 上流畅运行的相同查询耗尽了 mysql5.7 实例上的可用文件系统空间。
对该问题进行了研究,发现该/rdsdbdata/db/innodb/ibtmp1文件已扩展到使用所有可用存储空间。行为如图所示。
mysql5.6 和 mysql5.7 之间执行计划的额外比较显示,即使在两个数据库版本之间调整了 optimizer_switch 参数之后,5.7 包含的 2.56 亿条记录仍存在差异。
一些证据显示出与用户定义变量的使用有关,但不是决定性的。例如,SELECT 语句包括一个@count := @count + 1属性。
问题:如何缓解 MySQL 5.7 更改执行计划从而填满 RDS 实例的可用存储空间的事实。
我在 SQL Server 2008R2 Standard 中有一个没有聚集索引的表,有很多未使用的空间,如下图所示:
如何从 中回收未使用的空间MyTable?
该表声明如下:
CREATE TABLE [dbo].[MyTable](
[RecordID] [varchar](50) NULL,
[DocumentID] [nvarchar](100) NULL,
[DocumentName] [varchar](100) NULL,
[DocumentOwner] [varchar](50) NULL,
[DocumentTemplate] [varchar](50) NULL,
[DocumentData] [ntext] NULL,
[DocumentDate] [char](10) NULL,
[DocumentTime] [char](10) NULL,
[DocumentSize] [int] NULL,
[DocumentUpdateVersion] [int] NULL,
[SecondaryStorageURI] [varchar](150) NULL,
[PreviousExportUri] [varchar](150) NULL
)
Run Code Online (Sandbox Code Playgroud)
我应该遵循哪些步骤来释放未使用的空间?
我在一家零售公司工作,我们正在构建一个新的数据仓库。我们需要存储的一个元素是物理库存数据,即在特定时间特定位置有多少 SKU 可用。因此,我们要查看的变量是:skus、站点、天、小时和数量。
问题是大约有:100k skus 和 200 家商店。如果我每小时存储数据,我每天会得到 100k x 200 x 24 = 480,000,000 行。我了解并非每个 sku 在每个站点上的数量都大于 0。假设稀疏性高达 80%,当数量为 0 时,我们不存储它,因此我们每天保留 96,000,000 行。此外,即使我们有网站并且销售不会在晚上停止,但我们可能会假设夜间的数量变化很小,并且并非每个 sku 都是每小时销售一次。让我们假设一个 sku 平均每天只在 3 个不同的时间销售。这使我们减少到 12,000,000。
这是我们最初查看的 2.5%,然而,它仍然是一个相当大的数量。几个月后,每天 12,000,000 行将占用大量空间。该问题的部分解决方案是 Kimball 在 The Data Warehouse Toolkit 中建议的,即存储过去一个月左右每小时的数据,然后仅存储最近 n 个月的每日数据,然后删除旧记录。考虑到我们已经假设我们平均每天仅在 3 个不同的小时内销售 sku,从每小时数据切换到每日数据只会减少三分之二。假设我想保存过去六个月的股票数据。一个月按小时计算,五个月按每日计算(让我们假设一个月有 30 天来简化数学计算)这将是:(12,000,000 X 30) + (4,000,000 X 150) = 960,000,000 行。
我真的想不出更好的方法来做到这一点,以前有人不得不使用实物库存数据吗?你学到了什么有用的教训?有没有更有效的方法来存储这些数据?
谢谢,
我有一张每天插入和删除的表。平均记录数为 80,000。大约 20 个字段,其中 10 个是 VARCHAR(4000) 但是大多数记录的这些字段为空。1 个 NC 索引占 8MB。
加载此表的作业按预期运行,没有性能问题。
该表每天缓慢增长 1GB,最小记录数增加(有时会减少)。我似乎无法指出是什么导致了这种情况。任何帮助是极大的赞赏!
关于格式化 SQL Server 数据库文件的文件系统的当前最佳实践或一般指南是什么。
目前我们有 SQL Server 文件系统,NTFS 格式化为基于这些 Microsoft 指南的64KB 块大小。
我不确定这现在有多少适用性,以及我们如何找到最适合我们可以格式化为 1 或 2 MB 的最新 Windows 服务器。
因此,我正在寻找建议如何使用最新的 Windows 为现代 SQL Server(例如 2017 年及更高版本)格式化磁盘,因为 MSDN 文档似乎没有更新。使用不同的块大小(例如 512 KB 或 128 KB)是否会更好地格式化 mdf、ndf 和 ldf 文件所在的驱动器。
我有一个带有一个实例的 Microsoft SQL 集群。如果其中一个数据库已满,当数据库的事务日志已满时,集群中的 SQL 是否会进行故障转移?
如果取决于事务日志已满的原因,请参阅以下内容:
storage ×10
sql-server ×5
performance ×3
blob ×1
disk-space ×1
mysql ×1
mysql-5.7 ×1
oracle ×1
partitioning ×1