亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 38118 | 回復(fù): 19
打印 上一主題 下一主題

PostgreSQL的磁盤空間占用問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2004-06-26 13:54 |只看該作者 |倒序?yàn)g覽
我知道通過vacuum可以把一個(gè)表的內(nèi)容整理一下,使磁盤空間的占用變小,但pgsql能不能自動(dòng)利用表中的空閑空間呢?
例如我做了這么一個(gè)測試:
在一個(gè)表里insert十萬條記錄,記下它占用的磁盤空間,比如說是1000K,再刪除其中的5萬條記錄,接著再往里插5萬條記錄,這時(shí)這個(gè)表的磁盤空間不是接近于先前看到的1000K,而是變成了1500K,怎么會(huì)是這樣呢?刪掉的那5萬條記錄仍然會(huì)一直占著空間,等到我來做vacuum嗎?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2004-07-07 11:15 |只看該作者

PostgreSQL的磁盤空間占用問題

那我建議你去用oracle,sql server ,sybase
也做這樣的操作.你看看他們?cè)龃蟛???br />
你以為是方本文件。畡h了在加上.大小還一樣..

里有要日志,rollback段,......

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2004-07-07 18:27 |只看該作者

PostgreSQL的磁盤空間占用問題

班長兄弟請(qǐng)別發(fā)火 這個(gè)問題我是真感到比較困惑,所以來這里請(qǐng)教解決方法的。oracle下我做過試驗(yàn)的,我當(dāng)然沒有指望哪個(gè)數(shù)據(jù)庫能在一個(gè)固定大小的文件里無限制地放數(shù)據(jù),這個(gè)是最起碼的常識(shí)了。
這個(gè)問題我后來自已找到答案了,還是要用vacuum來搞定,與max_fsm_pages這個(gè)配置的大小有關(guān),看來這個(gè)問題太菜了,所以我也不在這里貼了

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2004-07-08 09:49 |只看該作者

PostgreSQL的磁盤空間占用問題

哈哈。我以前用SQL SERVER 就發(fā)現(xiàn)在天天長大,長啊長啊。。我都沒辦法。最后得裝:)

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2004-07-08 09:50 |只看該作者

PostgreSQL的磁盤空間占用問題

你可詳細(xì)介紹一下
max_fsm_pages

你的這次操作經(jīng)驗(yàn)給大家:)

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2004-07-08 13:58 |只看該作者

PostgreSQL的磁盤空間占用問題

響應(yīng)班長號(hào)召 :em11:
在很久很久以前。。。。。在一篇名為<<Tuning PostgreSQL for performance>;>;的文章,其中有這么一段:

max_fsm_pages:

PostgreSQL records free space in each of its data pages. This information is useful for vacuum to find out how many and which pages to look for when it frees up the space.
If you have a database that does lots of updates and deletes, that is going to generate dead tuples, due to PostgreSQL's MVCC system. The space occupied by dead tuples can be freed with vacuum, unless there is more wasted space than is covered by the Free Space Map, in which case the much less convenient "vacuum full" is required. By expanding the FSM to cover all of those dead tuples, you might never again need to run vacuum full except on holidays.

The best way to set max _fsm_pages is interactive; First, figure out the vacuum (regular) frequency of your database based on write activity; next, run the database under normal production load, and run "vacuum verbose analyze" instead of vacuum, saving the output to a file; finally, calculate the maximum total number of pages reclaimed between vacuums based on the output, and use that.

Remember, this is a database cluster wide setting. So bump it up enough to cover all databases in your database cluster. Also, each FSM page uses 6 bytes of RAM for administrative overhead, so increasing FSM substantially on systems low on RAM may be counter-productive.

大意是說,postgresql.conf中的這個(gè)參數(shù)(max_fsm_pages)用于告訴PostgreSQL申請(qǐng)多大的內(nèi)存空間用于保存數(shù)據(jù)文件的free space信息,按我的簡單理解,如果在一個(gè)表中刪除了一些記錄,PostgreSQL會(huì)把這一改動(dòng)記錄在"Free Space Map"中,下次如果再往表里插記錄時(shí),根據(jù)Free Space Map中的信息,就能利用以前刪記錄而騰出來的磁盤空間。不過Free Space Map是存在于內(nèi)存中,大小畢竟是有限的,對(duì)于大量數(shù)據(jù)的刪除+插入,要么指定一個(gè)較大的max_fsm_pages,要么及時(shí)進(jìn)行vacuum以整理表中的碎片,否則,PostgreSQL只有把新插入的記錄添加到文件的末尾,造成文件越來越大。我的一個(gè)程序就是意外地因?yàn)榇疟P空間滿了而中止的,它每次要往一個(gè)表里插500多萬條記錄,這之前先要delete同樣條數(shù)的一批記錄,可最后還是占滿了整個(gè)硬盤。
我覺得PostgreSQL的這種工作方式有它的一個(gè)好處,就是如果內(nèi)存足夠大,可以指定一個(gè)很大的Free Space Map,對(duì)于OLTP型的應(yīng)用,可能會(huì)大幅提高性能(猜測,沒有驗(yàn)證過),另外用戶可以自已選擇在合適的時(shí)候進(jìn)行vacuum或vacuum full,如果你確信一個(gè)表只會(huì)往里插記錄(如記錄操作日志),對(duì)這個(gè)表就可以永遠(yuǎn)不進(jìn)行vacuum full,是不是很靈活?
不過,使用vacuum full大量移動(dòng)數(shù)據(jù)畢竟是件很耗時(shí)的工作,在此期間數(shù)據(jù)庫性能會(huì)嚴(yán)重下降,大概這就是“靈活”的代價(jià)了。在這方面,Oracle的Block->;Extent->;Segment這種復(fù)雜的機(jī)制可能更有效一些吧。據(jù)說PostgreSQL將引入表空間的概念了,值得期待!
至于Free Space Map設(shè)多大,上面的文章教了個(gè)辦法,照著做就行了,只是需要弄明白,這畢竟是一個(gè)“Map”,如果打算刪掉300M的記錄,F(xiàn)ree Space Map并不需要申請(qǐng)300M喔

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2004-07-08 14:09 |只看該作者

PostgreSQL的磁盤空間占用問題

Tuning PostgreSQL for performance

Shridhar Daithankar, Josh Berkus
July 3, 2003 Copyright 2003 Shridhar Daithankar and Josh Berkus.
Authorized for re-distribution only under the PostgreSQL license (see www.postgresql.org/license).


Table of Contents

1 Introduction
2 Some basic parameters
    2.1 Shared buffers
    2.2 Sort memory
    2.3 Effective Cache Size
    2.4 Fsync and the WAL files
3 Some less known parameters
    3.1 random_ page_cost
    3.2 Vacuum_ mem
    3.3 max_fsm_pages
    3.4 max  fsm_ relations
    3.5 wal_buffers
4 Other tips
    4.1 Check your file system
    4.2 Try the Auto Vacuum daemon
    4.3 Try FreeBSD
5 The CONF Setting Guide

1 Introduction
This is a quick start guide for tuning PostgreSQL's settings for performance. This assumes minimal familiarity with PostgreSQL administration. In particular, one should know,
How to start and stop the postmaster service
How to tune OS parameters
How to test the changes
It also assumes that you have gone through the PostgreSQL administration manual before starting, and to have set up your PostgreSQL server with at least the default configuration.

There are two important things for any performance optimization:

Decide what level of performance you want
If you don't know your expected level of performance, you will end up chasing a carrot always couple of meters ahead of you. The performance tuning measures give diminishing returns after a certain threshold. If you don't set this threshold beforehand, you will end up spending lot of time for minuscule gains.
Know your load
This document focuses entirely tuning postgresql.conf best for your existing setup. This is not the end of performance tuning. After using this document to extract the maximum reasonable performance from your hardware, you should start optimizing your application for efficient data access, which is beyond the scope of this article.
Please also note that the tuning advices described here are hints. You should not implement them all blindly. Tune one parameter at a time and test its impact and decide whether or not you need more tuning. Testing and benchmarking is an integral part of database tuning.

Tuning the software settings explored in this article is only about one-third of database performance tuning, but it's a good start since you can experiment with some basic setting changes in an afternoon, whereas some other aspects of tuning can be very time-consuming. The other two-thirds of database application tuning are:

Hardware Selection and Setup
Databases are very bound to your system's I/O (disk) access and memory usage. As such, selection and configuration of disks, RAID arrays, RAM, operating system, and competition for these resources will have a profound effect on how fast your database is. We hope to have a later article covering this topic.
Efficient Application Design
Your application also needs to be designed to access data efficiently, though careful query writing, planned and tested indexing, good connection management, and avoiding performance pitfalls particular to your version of PostgreSQL. Expect another guide someday helping with this, but really it takes several large books and years of experience to get it right ... or just a lot of time on the mailing lists.
2 Some basic parameters
2.1 Shared buffers
Shared buffers defines a block of memory that PostgreSQL will use to hold requests that are awaiting attention from the kernel buffer and CPU. The default value is quite low for any real world workload and need to be beefed up. However, unlike databases like Oracle, more is not always better. There is a threshold above which increasing this value can hurt performance.
This is the area of memory PostgreSQL actually uses to perform work. It should be sufficient enough to handle load on database server. Otherwise PostgreSQL will start pushing data to file and it will hurt the performance overall. Hence this is the most important setting one needs to tune up.

This value should be set based on the dataset size which the database server is supposed to handle at peak loads and on your available RAM (keep in mind that RAM used by other applications on the server is not available). We recommend following rule of thumb for this parameter:

Start at 4MB (512) for a workstation
Medium size data set and 256-512MB available RAM: 16-32MB (2048-4096)
Large dataset and lots of available RAM (1-4GB): 64-256MB (8192-3276
PLEASE NOTE. PostgreSQL counts a lot on the OS to cache data files and hence does not bother with duplicating its file caching effort. The shared buffers parameter assumes that OS is going to cache a lot of files and hence it is generally very low compared with system RAM. Even for a dataset in excess of 20GB, a setting of 128MB may be too much, if you have only 1GB RAM and an aggressive-at-caching OS like Linux.

There is one way to decide what is best for you. Set a high value of this parameter and run the database for typical usage. Watch usage of shared memory using ipcs or similar tools. A recommended figure would be between 1.2 to 2 times peak shared memory usage.


2.2 Sort memory
This parameter sets maximum limit on memory that a database connection can use to perform sorts. If your queries have order-by or group-by clauses that require sorting large data set, increasing this parameter would help. But beware: this parameter is per sort, per connection. Think twice before setting this parameter too high on any database with many users. A recommended approach is to set this parameter per connection as and when required; that is, low for most simple queries and higher for large, complex queries and data dumps.

2.3 Effective Cache Size
This parameter allows PostgreSQL to make best possible use of RAM available on your server. It tells PostgreSQL the size of OS data cache. So that PostgreSQL can draw different execution plan based on that data.
Say there is 1.5GB RAM in your machine, shared buffers are set to 32MB and effective cache size is set to 800MB. So if a query needs 700MB of data set, PostgreSQL would estimate that all the data required should be available in memory and would opt for more aggressive plan in terms of optimization, involving heavier index usage and merge joins. But if effective cache is set to only 200MB, the query planner is liable to opt for the more I/O efficient sequential scan.

While setting this parameter size, leave room for other applications running on the server machine. The objective is to set this value at the highest amount of RAM which will be available to PostgreSQL all the time.


2.4 Fsync and the WAL files
This parameters sets whether or not write data to disk as soon as it is committed, which is done through Write Ahead Logging (WAL). If you trust your hardware, your power company, and your battery power supply enough, you set this to No for an immediate boost to data write speed. But be very aware that any unexpected database shutdown will force you to restore the database from your last backup.
If that's not an option for you, you can still have the protection of WAL and better performance. Simply move your WAL files, using either a mount or a symlink to the pg_xlog directory, to a separate disk or array from your main database files. In high-write-activity databases, WAL should have its own disk or array to ensure continuous high-speed access. Very large RAID arrays and SAN/NAS devices frequently handle this for you through their internal management systems.

3 Some less known parameters
3.1 random_page_cost
This parameter sets the cost to fetch a random tuple from the database, which influences the planner's choice of index vs. table scan. This is set to a high value as the default default based on the expectation of slow disk access. If you have reasonably fast disks like SCSI or RAID, you can lower the cost to 2. You need to experiment to find out what works best for your setup by running a variety of queries and comparing execution times.
3.2 Vacuum_mem
This parameter sets the memory allocated to Vacuum. Normally, vacuum is a disk intensive process, but raising this parameter will speed it up by allowing PostgreSQL to copy larger blocks into memory. Just don't set it so high it takes significant memory away from normal database operation. Things between 16-32MB should be good enough for most setups.
3.3 max_fsm_pages
PostgreSQL records free space in each of its data pages. This information is useful for vacuum to find out how many and which pages to look for when it frees up the space.
If you have a database that does lots of updates and deletes, that is going to generate dead tuples, due to PostgreSQL's MVCC system. The space occupied by dead tuples can be freed with vacuum, unless there is more wasted space than is covered by the Free Space Map, in which case the much less convenient "vacuum full" is required. By expanding the FSM to cover all of those dead tuples, you might never again need to run vacuum full except on holidays.

The best way to set max _ fsm _ pages is interactive; First, figure out the vacuum (regular) frequency of your database based on write activity; next, run the database under normal production load, and run "vacuum verbose analyze" instead of vacuum, saving the output to a file; finally, calculate the maximum total number of pages reclaimed between vacuums based on the output, and use that.

Remember, this is a database cluster wide setting. So bump it up enough to cover all databases in your database cluster. Also, each FSM page uses 6 bytes of RAM for administrative overhead, so increasing FSM substantially on systems low on RAM may be counter-productive.

3.4 max _ fsm _ relations
This setting dictates how many number of relations (tables) will be tracked in free space map. Again this is a database cluster-wide setting, so set it accordingly. In version 7.3.3 and later, this parameter should be set correctly as a default. In older versions, bump it up to 300-1000.
3.5 wal_buffers
This setting decides the number of buffers WAL(Write ahead Log) can have. If your database has many write transactions, setting this value bit higher than default could result better usage of disk space. Experiment and decide. A good start would be around 32-64 corresponding to 256-512K memory.
4 Other tips
4.1 Check your file system
On OS like Linux, which offers multiple file systems, one should be careful about choosing the right one from a performance point of view. There is no agreement between PostgreSQL users about which one is best.
Contrary to popular belief, today's journaling file systems are not necessarily slower compared to non-journaling ones. Ext2 can be faster on some setups but the recovery issues generally make its use prohibitive. Different people have reported widely different experiences with the speed of Ext3, ReiserFS, and XFS; quite possibly this kind of benchmark depends on a combination of file system, disk/array configuration, OS version, and database table size and distribution. As such, you may be better off sticking with the file system best supported by your distribution, such as ReiserFS for SuSE Linux or Ext3 for Red Hat Linux, not to forget XFS known for it's large file support . Of course, if you have time to run comprehensive benchmarks, we would be interested in seeing the results!

As an easy performance boost with no downside, make sure the file system on which your database is kept is mounted "noatime", which turns off the access time bookkeeping.

4.2 Try the Auto Vacuum daemon
There is a little known module in PostgreSQL contrib directory called as pgavd. It works in conjunction with statistics collector. It periodically connects to a database and checks if it has done enough operations since the last check. If yes, it will vacuum the database.
Essentially it will vacuum the database when it needs it. It would get rid of playing with cron settings for vacuum frequency. It should result in better database performance by eliminating overdue vacuum issues.

4.3 Try FreeBSD
Large updates, deletes, and vacuum in PostgreSQL are very disk intensive processes. In particular, since vacuum gobbles up IO bandwidth, the rest of the database activities could be affected adversely when vacuuming very large tables.
OS's from the BSD family, such as FreeBSD, dynamically alter the IO priority of a process. So if you lower the priority of a vacuum process, it should not chew as much bandwidth and will better allow the database to perform normally. Of course this means that vacuum could take longer, which would be problematic for a "vacuum full."

If you are not done with your choice of OS for your server platform, consider BSD for this reason.


5 The CONF Setting Guide
Available here is an Annotated Guide to the PostgreSQL configuration file settings, in both OpenOffice.org and PDF format. This guide expands on the official documentation and may eventually be incorporated into it.
The first column of the chart is the GUC setting in the postgresql.conf file.
The second is the maximum range of the variable; note that the maximum range is often much larger than the practical range. For example, random_page_cost will accept any number between 0 and several billion, but all practical numbers are between 1 and 5.
The third column contains an enumeration of RAM or disk space used by each unit of the parameter.
The fourth column indicates whether or not the variable may be SET from the PSQL terminal during an interactive setting. Most settings marked as "no" may only be changed by restarting PostgreSQL.
The fifth column quotes the official documentation available from the PostgreSQL web site.
The last column is our notes on the setting, how to set it, resources it uses, etc. You'll notice some blank spaces, and should be warned as well that there is still strong disagreement on the value of many settings.
Users of PostgreSQL 7.3 and earlier will notice that the order of the parameters in this guide do not match the order of the parameters in your postgresql.conf file. This is because this document was generated as part of an effort to re-organize the conf parameters and documentation; starting with 7.4, this document, the official documentation, and the postgresql.conf file are all in the same logical order.
As noted in the worksheet, it covers PostgreSQL versions 7.3 and 7.4. If you are using an earlier version, you will not have access to all of these settings, and defaults and effects of some settings will be different.

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2004-07-11 21:34 |只看該作者

PostgreSQL的磁盤空間占用問題

加個(gè)trigger做vacuum如何?

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2004-09-23 10:55 |只看該作者

PostgreSQL的磁盤空間占用問題

受教了!

images.jpg (2.56 KB, 下載次數(shù): 330)

images.jpg

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2004-09-25 17:13 |只看該作者

PostgreSQL的磁盤空間占用問題

pg占空間就是大,沒辦法!
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP