postgreSQL pgfincore introduces
postgreSQL pgfincore introduces pgfincore 和shared buffer不同,是OS层面的缓存,可以把大对象缓存到OS的cache里,其实就是内存,所以机器的内存配置越大越好,至于oracle是缓存到buffer_pool_keep,可以手工刷出,不过这个是database的缓存,和pg的share
postgreSQL pgfincore introduces
pgfincore 和shared buffer不同,是OS层面的缓存,可以把大对象缓存到OS的cache里,其实就是内存,所以机器的内存配置越大越好,至于oracle是缓存到buffer_pool_keep,可以手工刷出,不过这个是database的缓存,和pg的shared buffer同理。这里就不再详细介绍。
1.下载wget http://pgfoundry.org/frs/download.php/3186/pgfincore-v1.1.1.tar.gz
2.解压下载的安装包tar -zxvf pgfincore-v1.1.1.tar.gz
3.复制解压后的目录到pg源代码目录/contrib
4.安装:
postgres用户:
make clean
make
su - root
source /home/postgres/.bash_profile
make install
根据READ.rst
For PostgreSQL >= 9.1, log in your database and::
mydb=# CREATE EXTENSION pgfincore;
For other release, create the functions from the sql script (it should be in
your contrib directory)::
psql mydb -f pgfincore.sql
postgres=# select version();
version
---------------------------------------------------
PostgreSQL 9.1.2 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42), 64-bit
postgres=# CREATE EXTENSION pgfincore;
CREATE EXTENSION
postgres=# select * from pg_extension ;
extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
----------------+----------+--------------+----------------+------------+-----------+--------------
plpgsql | 10 | 11 | f | 1.0 | |
pg_buffercache | 10 | 2200 | t | 1.0 | |
pgfincore | 10 | 2200 | t | 1.1.1 | |
pgfincore使用:
pgfincore 对象的cache情况
pgfadvise_willneed 将对象刷入cache
pgfadvise_dontneed 将对象刷出cache
pgfadvise_loader 直接和page cache交互,加载,卸载页面
pgsysconf 操作系统的cache情况
pgsysconf_pretty同上,只不过输更易懂,带上了单位。
postgres=# \d t
Table "public.t"
Column | Type | Modifiers
--------+---------+-----------------------------------------------
s | integer | not null default nextval('t_s_seq'::regclass)
i | integer |
postgres=# insert into t(i) values (generate_series(1,10000000));
INSERT 0 10000000
postgres=# select pg_size_pretty(pg_relation_size('t'));
pg_size_pretty
----------------
346 MB
当前文件系统的使用情况:pgsysconf(),pgsysconf_pretty()
postgres=# select * from pgsysconf();
os_page_size | os_pages_free | os_total_pages
--------------+---------------+----------------
4096 | 182787 | 2044328
postgres=# select * from pgsysconf_pretty();
os_page_size | os_pages_free | os_total_pages
--------------+---------------+----------------
4096 bytes | 721 MB | 7986 MB
(1 row)
表t的使用情况:pgfincore
postgres=# select * from pgfincore('t');
relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit
------------------+---------+--------------+--------------+-----------+-----------+---------------+---------
base/12699/16441 | 0 | 4096 | 88496 | 88496 | 1 | 181767 |
os_page_size:文件系统页大小
rel_os_pages:占用文件系统页数量
pages_mem:有多少文件系统页在系统cache
刷入cache:pgfadvise_willneed()
postgres=# select * from pgfadvise_willneed('t');
relpath | os_page_size | rel_os_pages | os_pages_free
------------------+--------------+--------------+---------------
base/12699/16441 | 4096 | 88496 | 186428
(1 row)
postgres=# select * from pgfincore('t');
relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit
------------------+---------+--------------+--------------+-----------+-----------+---------------+---------
base/12699/16441 | 0 | 4096 | 88496 | 88496 | 1 | 186397 |
(1 row)
刷出cache:
postgres=# select * from pgfadvise_dontneed('t');
relpath | os_page_size | rel_os_pages | os_pages_free
------------------+--------------+--------------+---------------
base/12699/16441 | 4096 | 88496 | 275021
(1 row)
postgres=# select * from pgfincore('t');
relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit
------------------+---------+--------------+--------------+-----------+-----------+---------------+---------
base/12699/16441 | 0 | 4096 | 88496 | 0 | 0 | 275052 |
(1 row)
pgfadvise_loader:
postgres=# select * from pgfadvise_loader('t', 0, true, true, B'111000');
relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded
------------------+--------------+---------------+--------------+----------------
base/12699/16441 | 4096 | 186626 | 3 | 3
(1 row)
loading:
postgres=# select * from pgfadvise_loader('t', 0, true, false, B'111000');
relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded
------------------+--------------+---------------+--------------+----------------
base/12699/16441 | 4096 | 186460 | 3 | 0
(1 row)
unloading:
postgres=# select * from pgfadvise_loader('t', 0, false, true, B'111000');
relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded
------------------+--------------+---------------+--------------+----------------
base/12699/16441 | 4096 | 186557 | 0 | 3
(1 row)
pgfadvise_NORMAL
pgfadvise_SEQUENTIAL
pgfadvise_RANDOM
这几个可以指定当前内存的属性,正常,顺序,还是随机。
快照与恢复:
做快照:
create table pgfincore_snapshot as
select 't'::text as relname,*,now() as date_snapshot
from pgfincore('t',true);
应用快照:
select * from pgfadvise_loader('t', 0, true, true,
(select databit from pgfincore_snapshot
where relname='t' and segment = 0));
relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded
------------------+--------------+---------------+--------------+----------------
base/12699/16441 | 4096 | 186259 | 88490 | 6
(1 row)
postgres=# select * from pgfincore('t');
relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit
------------------+---------+--------------+--------------+-----------+-----------+---------------+---------
base/12699/16441 | 0 | 4096 | 88496 | 88490 | 2 | 186097 |
(1 row)
可以看到 88496 和88490,有几个页面是刷出cache,所以不相等
select * from pgfadvise_willneed('t');
postgres=# select * from pgfincore('t');
relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit
------------------+---------+--------------+--------------+-----------+-----------+---------------+---------
base/12699/16441 | 0 | 4096 | 88496 | 88496 | 1 | 186227 |
(1 row)
限制:
*PgFincore needs mincore() and POSIX_FADVISE.
*PgFincore has a limited mode when POSIX_FADVISE is not provided by the platform.
*PgFincore needs PostgreSQL >= 8.3

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

MySQL and PostgreSQL: Performance Comparison and Optimization Tips When developing web applications, the database is an indispensable component. When choosing a database management system, MySQL and PostgreSQL are two common choices. They are both open source relational database management systems (RDBMS), but there are some differences in performance and optimization. This article will compare the performance of MySQL and PostgreSQL and provide some optimization tips. Performance comparison comparing two database management

MySQL and PostgreSQL: Best Practices in Web Development Introduction: In the modern world of web development, databases are an essential component. When choosing a database, common choices are MySQL and PostgreSQL. This article will cover best practices for using MySQL and PostgreSQL in web development and provide some code examples. 1. Applicable scenarios MySQL is suitable for most web applications, especially those that require high performance, scalability and ease of use.

Learn the database functions in the Go language and implement the addition, deletion, modification, and query operations of PostgreSQL data. In modern software development, the database is an indispensable part. As a powerful programming language, Go language provides a wealth of database operation functions and toolkits, which can easily implement addition, deletion, modification and query operations of the database. This article will introduce how to learn database functions in Go language and use PostgreSQL database for actual operations. Step 1: Install the database driver in Go language for each database

Go language is a fast and efficient programming language suitable for building web services and back-end applications. PostgreSQL is an open source relational database management system that promises to provide higher reliability, scalability and data security. In this article, we’ll take a deep dive into using PostgreSQL with Go and provide some practical code examples and tips. Installing and setting up PostgreSQL First, we need to install and set up PostgreSQL. Can be found on the official website

MySQL and PostgreSQL: Data Security and Backup Strategies Introduction: In modern society, data has become an indispensable part of business and personal life. For database management systems, data security and backup strategies are crucial, both to protect data from loss or damage and to ensure the reliability and integrity of recovered data. This article will focus on the data security and backup strategies of two mainstream relational database systems, MySQL and PostgreSQL. 1. Data security: (1) User rights

With the development of database technology, database management systems also present a variety of choices. Developers can choose the most suitable database according to their needs and preferences. As an advanced open source relational database system, PostgreSQL is attracting more and more attention and use by developers. So, how to use PostgreSQL database in PHP programming? 1. Install and configure the PostgreSQL database. Before using PostgreSQL, you need to install and configure it. first

MySQL and PostgreSQL: How to optimize database query performance? Overview: Database query performance is an important consideration when developing applications. Good query performance improves application responsiveness and user experience. This article will introduce some methods to optimize database query performance, focusing on two commonly used databases, MySQL and PostgreSQL. Optimization of database indexes: Database indexes are an important factor in improving query performance. Indexes can speed up data search and reduce query scanning time.

Database capacity planning and expansion: MySQL vs. PostgreSQL Introduction: With the rapid development of the Internet and the advent of the big data era, database capacity planning and expansion has become increasingly important. MySQL and PostgreSQL are two popular relational database management systems (RDBMS). They have different characteristics and applicable scenarios in database capacity planning and expansion. This article will compare the two databases and give some code examples to demonstrate their differences. 1. MySQ
