Page Size

本文介绍了计算机虚拟内存中的页(Page)概念,页是操作系统分配内存和进行内存与硬盘交换的基本单位。页的大小通常固定,如4096字节,而更大的页可能导致内存浪费,更小的页能更好地匹配实际需求。硬盘读取时,大块连续数据的传输效率更高。Windows系统可以通过GetSystemInfo()函数获取页大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看好多论文和源码中都有Page Size的概念,我却一直比较模糊,今天特地仔细查了一下。

 

基本概念

In the context of computer virtual memory, a page, memory page, or virtual page is a fixed-length block of main memory that is contiguous in both physical memory addressing and virtual memory addressing. A page is usually the smallest unit of data for the following:

 

在计算机虚拟内存的概念中,页、内存页或者虚拟页是指内存中的一段固定长度的快,这个内存块在物理地址和虚拟内存地址上都是连续的。一个页通常是以下操作的最小单元:

### 关于 MySQL InnoDB 混合 Page Size 的支持与配置调优 #### 什么是混合 Page Size? 在 MySQL 中,Page 是存储引擎用于管理数据的基本单位。InnoDB 存储引擎默认的页面大小为 16KB (即 `innodb_page_size=16K`)。然而,在某些特定场景下,可能需要更灵活的页面大小来满足不同的工作负载需求。为此,MySQL 提供了对 **混合 Page Size** 的支持。 通过调整 `innodb_page_size` 参数,可以指定全局的页面大小。但是需要注意的是,一旦创建表空间并设置了其对应的 Page Size,则该表空间中的所有表都将继承此 Page Size 设置[^4]。 #### 如何启用混合 Page Size? 要实现不同表具有不同的 Page Sizes,可以通过以下方式完成: 1. 创建独立文件形式(`file-per-table`)的新表空间,并为其单独定义所需的 Page Size; ```sql CREATE TABLESPACE ts_name ADD DATAFILE 'ts_file.ibd' ENGINE=INNODB FILE_BLOCK_SIZE=value; ``` 2. 使用上述新建好的自定义 Page Size 表空间去建立新表; ```sql CREATE TABLE tbl_name (...) TABLESPACE=ts_name; ``` 这里的关键在于利用 `CREATE TABLESPACE ... FILE_BLOCK_SIZE=` 命令来设定新的 Page Size,而无需更改整个数据库系统的默认值[^5]。 #### 性能影响因素分析 当考虑是否采用以及如何应用混合 Page Size 进行性能优化时,需注意以下几个方面的影响: - **内存占用**: 较大尺寸 Pages 可减少缓存池(Cache Pool)内的碎片率,从而提高命中率和整体读写效率。但同时也意味着单次 I/O 请求传输的数据量增加,可能会带来额外延迟成本。 - **磁盘利用率**: 小型 Pages 更适合频繁更新的小记录集操作环境,因为它们能够更好地适应随机访问模式下的局部性原则(Locality of Reference),进而降低平均寻道时间(Average Seek Time)[^6]。 - **压缩效果**: 对于高压缩比的工作负荷来说,较小的 Page Size 往往可以获得更好的压缩比率,这是因为小块更容易被完全填满而不留空白区域待填充的缘故[^7]。 因此,在实际部署过程中应综合考量业务特点、硬件条件等因素后再做决定。 ```python # Python 示例代码展示如何动态修改 innodb 缓冲区参数以配合最佳化 pagesize 设定 import mysql.connector def set_innodb_config(db_user, db_password, host='localhost'): connection = mysql.connector.connect( user=db_user, password=<PASSWORD>, host=host ) cursor = connection.cursor() try: # 修改缓冲池实例数量至适当水平 cursor.execute("SET GLOBAL innodb_buffer_pool_instances = 8;") # 如果存在足够的 RAM 则增大 buffer pool size 来匹配更大 page sizes cursor.execute("SET GLOBAL innodb_buffer_pool_size = 10*1024*1024*1024;") print('Successfully updated INNODB configurations.') finally: if(connection.is_connected()): cursor.close() connection.close() set_innodb_config('root', '') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值