• day021InnoDB_2 SpaceID.PageNumber 压缩表)


    1 表空间

    1.1General 表空间

    CREATE TABLESPACE tablespace_name

        ADD DATAFILE 'file_name'

        [FILE_BLOCK_SIZE = value]

            [ENGINE [=] engine_name]

    CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;

    CREATE TABLESPACE `ts1` ADD DATAFILE '/my/tablespace/directory/ts1.ibd' Engine=InnoDB;

    CREATE TABLESPACE `ts1` ADD DATAFILE '../my_tablespace/ts1.ibd' Engine=InnoDB;

    CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=COMPACT;

    ALTER TABLE t2 TABLESPACE ts1;

    如果row_format是compressed,file_block_size必须被指定,key_block_size被指定和file_block_size一样

    查看系统表空间

    select * from innodb_sys_tablespaces;

    select * from INNODB_SYS_TABLES;

    这两个有什么区别?

    1.2 undo表空间

    innodb_undo_tablespaces设置

    SELECT @@innodb_undo_tablespaces;

    SET GLOBAL innodb_undo_log_truncate=ON;

    SET GLOBAL innodb_max_undo_log_size=2147483648;

    SELECT @@innodb_undo_directory;

    SELECT @@innodb_purge_rseg_truncate_frequency;

    2

    重做日志(redo)物理逻辑日志,没有oracle的归档重做日志

    innodb_log_file_size=1G

    防止脏页刷新被hang住

    表空间的内部组织结构

    段->区->页

    区:最小的空间申请单位

    区的固定1M(每1m都是连续的)

    16k 64个页

    8k 128个页

    4k 256个页

    通常一次申请4个区的大小

    inno_page_size默认16k(5.6可设置)

    页:最小的io操作单位

    innodb中怎么样定义一个页的(space,page_no)

    每个space对应一个文件

    pagenum在表空间 他是第几个16k的页

    二进制文件是按偏移量读取字节数

    select space,table_id from innodb_sys_tables where space <>0 limit 1;

    space和table是怎么对应的?

    fread(offset,bytes)不关两个页在物理上是否连续

    space_id是自增的,表删除之后不会回收

    怎么样才能释放空间

    page_no是全局自增

    如果ibdata文件没了怎么办

    extent是逻辑概念

    区和段都是逻辑概念

    fread(page_no*16384,1384)

    能从数据库查某个表的space和页是哪个吗?

    一个页的数据会跨表吗?(可以跨表)

    ssd设置page_no为8k

    mysql oltp场景

    数据仓库 大量join 设置大一点

    inno_page_size全局

    innodb_sys_tablespaces

    create tablespace t5 add datafile '' file_block_size=1096;

    create table aa()tablespace=t5;

    压缩表可以tablespace的什么大小与page-size不一致

    create table gg()row_format=compressed,key_block_size=4

    alter table t row_format=compressed,key_block_size=4;

    compressed不是对记录进程压缩,而是对一个页进程压缩

    不解压能插入

    插入的redo log放进去 满了 解压 再压缩

    information_schema innodb_cmp

    innodb_cmp_reset

    innodb_cmp_per_index

    select table_schema,table_name from information_shcema.tables

    where table_name not in(select distinct talbe_name from information_schema

    where column_key='PRI')and table_schema not in ('mysql','information_shcema','sys','performation_shcema');

    了解information_schema的tables和columns表

    ssd盘可以设置4k或者8k

    不可以将非压缩表设置和innodb_page_size不同

    select * from innodb_cmp_per_index limit 1\G

    innodb_cmp_per_index_enabled=on(打开对性能有一定的影响)

    alter table xxxx engine=innodb row_format=compressed,key_block_size=16是否有意义?

    页已经压缩过了,再对内容压缩 key_block_size开启基于页的压缩

    并不是页设置的越小压缩率就越小

    iostat查看io bond

    master和slave不一定都压缩

    key_block_size一般设置为innodb_page_size的一半

    mysql5.7新的压缩

    透明表空间压缩transparent page compress

    create table jjj()compression='zlib';

    alter table jjj compression='lz4';快一点

    并没有指定页的大小

    使用了文件系统层面的压缩

  • 相关阅读:
    没有功能需求文档就拒绝开发吗?
    用Spring cloud Stream来开发基于MQ消息驱动的微服务
    在Linux上讲Java命令行的作为服务运行
    EF提供的三种查询方式
    C#中sealed关键字
    winform Chart控件 获取鼠标处坐标值方法
    Linq to Entity中连接两个数据库时要注意的问题
    linq中查询列表的使用及iqueryable和list集合之间的转换
    C语言关键字register、extern、static
    DllImport的具体用法
  • 原文地址:https://www.cnblogs.com/lvjinping/p/9167704.html
Copyright © 2020-2023  润新知