Questions tagged «disk-space»

有关数据库或数据库对象使用的存储空间的问题。

4
测量PostgreSQL表行的大小
我有一个PostgreSQL表。select *是很慢的,select id而又好又快。我认为这可能是因为行的尺寸很大,并且运输需要一段时间,或者可能是其他一些因素。 我需要所有字段(或几乎所有字段),因此仅选择一个子集并不是快速解决方案。选择我想要的字段仍然很慢。 这是我的表架构减去名称: integer | not null default nextval('core_page_id_seq'::regclass) character varying(255) | not null character varying(64) | not null text | default '{}'::text character varying(255) | integer | not null default 0 text | default '{}'::text text | timestamp with time zone | integer | timestamp with time …

5
什么时候可以收缩数据库?
我知道收缩是魔鬼:它会颠倒页面顺序,并导致皮肤癌,数据碎片和全球变暖。清单还在继续……也就是说,我有一个100 GB的数据库,我删除了50 GB的数据-不是在一个表上,而是在数据库范围内对旧数据进行一般修剪,覆盖了90%的数据。表-这是否构成缩小数据库的合适用例? 如果不是,那么从数据库中删除如此高的数据百分比后,应采取哪些适当的步骤来清理房屋?我可以想到两个:重建索引和更新统计信息。还有什么?

6
查询以报告磁盘空间分配和已用空间
对于一个应用程序,我们总共使用6个数据库,并且在所有6个自动增长的数据库中(通过SAN存储)我们只能共享4TB的空间。 我想为单个数据库写一个查询(报告),以指示SQL Server Management Studio中“任务”>“收缩”>“数据库”选项下的“当前分配的空间”和“可用的可用空间”属性。 然后,我想将这些数字转换为TB并汇总每个数据库,以大致估算出我们还剩下多少空间。可以通过T-SQL查询访问这些字段吗?如果是这样,查询将是什么样?

1
如何在PostgreSQL上回收磁盘空间?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 5年前。 我在本地安装了9.1数据库,只有几个表具有cca。300 mio记录,数据库增长到约20 GB。之后,我发出delete from命令从中删除所有记录(我应该使用过truncate,但我不知道)。因此,我对数据库进行了充分的清理以回收磁盘空间,但这无济于事。我的问题看起来与此相同,但是没有提供解决方案。我已经检查了此线程和有关“恢复磁盘空间”的文档,但仍然找不到解决方案。我使用此代码来获取所有表的大小 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND C.relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY …


1
VACUUM将磁盘空间返回给操作系统
VACUUM除某些特殊情况外,通常不会将磁盘空间返回给操作系统。 从文档: 标准形式的VACUUM删除表和索引中的死行版本,并标记可用于将来重用的空间。但是,它不会将空间返回给操作系统,除非在特殊情况下,表末尾的一个或多个页面变得完全空闲,并且可以轻松获得独占表锁。相反,VACUUM FULL通过编写没有死角的表文件的全新版本来主动压缩表。这样可以最大程度地减少表的大小,但是会花费很长时间。在操作完成之前,表的新副本还需要额外的磁盘空间。 问题是:如何实现该数据库状态one or more pages at the end of a table become entirely free?可以通过完成此操作VACUUM FULL,但是我没有足够的空间来实现它。那么还有其他可能性吗?

3
为什么表的数据空间会占用原始数据大小的4倍?
我有一个具有490 M行和55 GB表空间的表,所以每行约167字节。该表包含三列:a VARCHAR(100),a DATETIME2(0)和a SMALLINT。该VARCHAR字段中文本的平均长度约为21.5,因此原始数据应为每行32字节左右:22 + 2表示VARCHAR,6表示DATETIME2,2表示16位整数。 请注意,上面的空间仅是数据,而不是索引。我正在使用“属性” |“属性”下报告的值 储存| 一般| 数据空间。 当然必须有一些开销,但是每行135个字节似乎很多,尤其是对于大表而言。为什么会这样呢?其他人看到过类似的乘数吗?哪些因素会影响所需的额外空间量? 为了进行比较,我尝试创建一个包含两个INT字段和1 M行的表。所需的数据空间为16.4 MB:每行17个字节,而原始数据为8个字节。另一个带有INT和的测试表与VARCHAR(100)实际表填充相同的文本,每行使用39个字节(44 K行),我希望其中有28个字节。 因此,生产表的开销要大得多。这是因为它更大吗?我希望索引大小大约为N * log(N),但我不明白为什么实际数据所需的空间是非线性的。 在此先感谢您提供任何指导! 编辑: 列出的所有字段均为NOT NULL。实际表在该VARCHAR字段和该DATETIME2字段上按该顺序具有聚集的PK 。对于这两个测试,第一个INT是(集群)PK。 如果很重要:该表记录了ping结果。这些字段是URL,Ping日期/时间和延迟(以毫秒为单位)。数据会不断添加,并且永远不会更新,但是会定期删除数据,以使每个URL每小时仅减少几条记录。 编辑: 这里的一个非常有趣的答案表明,对于具有大量读写的索引而言,重建可能没有好处。就我而言,所消耗的空间是一个问题,但是如果写性能更重要,则松散的索引可能会更好。


1
如何在SQL Server盒上扩展卷?
这是针对系统操作员(或那些曾经经历过此经验的人)的问题。 我公司想在生产中的现有SQL Server盒上分配额外的磁盘空间。我们想知道是否可以联机完成扩展卷(在磁盘管理中为“扩展卷...”),还是需要关闭SQL Server服务。 为何应停止SQL Server Service来执行此操作,还是在白天只执行此操作可以吗? 以防万一系统规格相关。这是运行Windows 2012 R2和SQL Server 2008 R2的真实设备(无虚拟化)。 谢谢!

2
减少varchar列的大小对数据库文件有什么影响?
我们数据库中有许多表,这些VARCHAR(MAX)表中的列VARCHAR(500)(或比max小得多)足以满足需要。自然,我想清理它们,并将尺寸减小到更合理的水平。我了解的“方法”是:我的问题是更改这些列会对磁盘上​​的页面和现存内容产生什么影响?(那里有很多关于增长一列时会发生什么的信息,但是很难找到收缩一列时会发生什么的信息。) 有些表的行数非常小,因此我不担心更改的成本,但有些表却很大,并且担心它们可能会被重组并导致大量阻塞/停机。实际上,我只想一种估计维护时段的方法。通常,我想更好地了解这种情况下数据库引擎的行为。 提前致谢! 编辑: 我正在查看20个表,尽管其中只有一半的行数大于1,000。最大的行将近一百万行。犯规最严重的是一张有350,000行和4 VARCHAR(MAX)列的表,可以缩小到该VARCHAR(500)水平。


2
如何释放磁盘空间?哪些日志/目录要清除?
我想释放Linux机器上的磁盘空间。我仔细研究了空间使用情况,发现以下目录的大小很大 /u01/app/11.2.0/grid/cv/log /u01/app/11.2.0/grid/log/diag/tnslsnr/r1n1/listener_scan2/alert (Contains xml files) /u01/app/11.2.0/grid/rdbms/audit(Contains .aud files) /home/oracle/oradiag_oracle/diag/clients/user_oracle/host_XXXXXXXXXX/alert(Contains xml files) /u01/app/oracle/diag/rdbms/crimesys/crimesys1/alert (Contains xml files) 我可以从这些目录中删除内容吗?注意:我的意思是内容而不是目录。

2
如何恢复文件被移动到的InnoDB表
所以我有一个在复制流上安装的测试数据库服务器。顾名思义,优化过程很快就被填补了从属数据目录上的空间。MySQL尽职尽责地只是在等待更多的空间。 该数据目录是仅用作mysql的数据目录的文件系统,因此没有其他可释放的内容。 我有一个4 gig innodb测试表,它不是复制流的一部分,所以我想尝试一些方法来查看它是否可以工作,并且作为测试环境,我不太担心事情出了什么问题。 这是我采取的步骤 弄丢了我要移动的桌子 在其上放置一个读锁(即使没有任何写入,并且不在复制流中) 将.frm和.ibd复制到带有一些备用空间的文件系统中 解锁桌子 删减了该表-释放了足够的空间以使优化完成,复制开始重新进行。 停止奴隶/关闭mysql 将文件从tmp中复制回数据目录 重启mysql .err日志中没有任何显示,一切看起来不错。我连接并使用mydb;并在显示表中查看我正在弄乱的表。但是,如果我尝试 select * from testtable limit 10; 我得到错误 ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist 从目前为止我所知道的,我可以从其他所有表中读取数据,并且复制开始备份而没有任何抱怨。 从这一点上我有什么办法可以恢复?如果需要,我可以从头开始重建它,但是很好奇其他人对该企业的总体看法。关于我采取的一系列步骤,如果没有更完美的结果,是否有任何结果? 如果这不是测试服务器,我不能只是“实时运行”并看看会发生什么?如果我愿意,最好的方法是暂时释放生产从属服务器上的空间?

2
sys.allocation_units和sp_spaceused上的空间使用情况
众所周知的事实是DMV不能保存有关页数和行数的准确信息。但是,当您更新统计信息时,我看不到为什么他们不这样做。 我正在使用一个监视工具,想知道每个索引和数据的磁盘大小,等等。最终我想找到正确的填充因子,以及其他东西。 我的函数使用的空间和旧的sp_spaceused在空间使用上有所不同,但在记录数上却没有。 您能看到我选择的商品中缺少什么吗? 这是sp_spaceused(然后我将数字转换为MB): sp_spaceused 'tblBOrderRelationship' go select 318008/1024.00 AS reserved, 140208/1024.00 AS data, 177048/1024.00 AS index_size, 752/1024.00 AS unused 但是,当我在下面的\下面的图片中运行我的select,代码时,我得到的数字略有不同。 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT schema_name(t.schema_id) as SchemaName, t.NAME AS TableName, t.type_desc, t.is_ms_shipped, t.is_published, t.lob_data_space_id, t.filestream_data_space_id, t.is_replicated, t.has_replication_filter, t.is_merge_published, t.is_sync_tran_subscribed, --t.is_filetable, i.name as indexName, i.type_desc, i.is_unique, …

2
删除数据库后释放磁盘空间
我正在开发一个dev系统,并且一直在还原到我用于开发目的的数据库“ foo”。在处理这些问题时,我刚刚运行了DROP DATABASE foo。但是,我很快意识到我已经吃光了磁盘上的所有空间。废话 VACUUM FULL是否从另一个逻辑数据库中释放了我先前删除的数据库(foo)的空间?我从另一个逻辑数据库中尝试了此操作,并回收了可用空间,但我认为这不足以解决我进行的所有CREATE DATABASE / DROP DATABASE调用。它可能只是对我运行的逻辑数据库进行了真空处理。 必须有一种无需执行整个数据库初始化就可以回收该空间的方法吗? 编辑 因此,我大致按照以下步骤从备份重新初始化了数据库。还原后,我已经收回了磁盘上的大量空间!现在可以使用,但是有关如何清除删除的数据库的任何帮助仍然有用。 编辑2 因此,我设法收集了有关此问题的更多信息...这是我想出的一个示例: Initial partition size: Size Used Avail Use% Mounted on 25G 8.1G 16G 35% /apps1 After creating my new database and populating it: 25G 18G 6.4G 73% /apps1 After Dropping the database using "DROP database mydb" …

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.