例如:
columns_priv 0 MyISAM utf8_bin 1.0 KB -
db 1 MyISAM utf8_bin 4.9 KB 438 字节
func 0 MyISAM utf8_bin 1.0 KB -
help_category36 MyISAM utf8_general_ci 23.4 KB -
help_keyword 378 MyISAM utf8_general_ci 87.7 KB -
help_relation 724 MyISAM utf8_general_ci 18.4 KB -
help_topic 458 MyISAM utf8_general_ci 258.4 KB -
host 0 MyISAM utf8_bin 1.0 KB -
proc 0 MyISAM utf8_general_ci 1.0 KB -
procs_priv 0 MyISAM utf8_bin 1.0 KB -
tables_priv 0 MyISAM utf8_bin 1.0 KB -
time_zone 0 MyISAM utf8_general_ci 1.0 KB -
time_zone_leap_second 0 MyISAM utf8_general_ci 1.0 KB -
time_zone_name0 MyISAM utf8_general_ci 1.0 KB -
time_zone_transition 0 MyISAM utf8_general_ci 1.0 KB -
time_zone_transition_type0 MyISAM utf8_general_ci 1.0 KB -
user 2 MyISAM utf8_bin 2.2 KB -
17 个表 总计 1,599 MyISAM gb2312_chinese_ci 406.0 KB 438 字节
Linux 进程通过 C 标准库中的内存分配函数 malloc 向系统申请内存,但是到真正与内核交互之间,其实还隔了一层,即内存分配管理器(memory allocator)。常见的内存分配器包括:ptmalloc(Glibc)、tcmalloc(Google)、jemalloc(FreeBSD)。MySQL 默认使用的是 glibc 的 ptmalloc 作为内存分配器。
内存分配器采用的是内存池的管理方式,处在用户程序层和内核层之间,它响应用户的分配请求,向 *** 作系统申请内存,然后将其返回给用户程序。
为了保持高效的分配,分配器通常会预先向 *** 作系统申请一块内存,当用户程序申请和释放内存的时候,分配器会将这些内存管理起来,并通过一些算法策略来判断是否将其返回给 *** 作系统。这样做的最大好处就是可以避免用户程序频繁的调用系统来进行内存分配,使用户程序在内存使用上更加高效快捷。
关于 ptmalloc 的内存分配原理,个人也不是非常了解,这里就不班门弄斧了,有兴趣的同学可以去看下华庭的《glibc 内存管理 ptmalloc 源代码分析》【文末链接】。
关于如何选择这三种内存分配器,网上资料大多都是推荐摒弃 glibc 原生的 ptmalloc,而改用 jemalloc 或者 tcmalloc 作为默认分配器。因为 ptmalloc 的主要问题其实是内存浪费、内存碎片、以及加锁导致的性能问题,而 jemalloc 与 tcmalloc 对于内存碎片、多线程处理优化的更好。
目前 jemalloc 应用于 Firefox、FaceBook 等,并且是 MariaDB、Redis、Tengine 默认推荐的内存分配器,而 tcmalloc 则应用于 WebKit、Chrome 等。
MySQL 3.22 限制的表大小为4GB。由于在MySQL 3.23 中使用了MyISAM 存储引擎,最大表尺寸增加到了65536TB(2567 – 1字节)。由于允许的表尺寸更大,MySQL数据库的最大有效表尺寸通常是由 *** 作系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。
InnoDB 存储引擎将InnoDB 表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的最大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的最大容量为64TB。
扩展资料
MySQL数据库中,数据量越来越大的优化方案:
单表优化可以从这几个角度出发:
1、表分区
MySQL在5.1之后才有的,可以看做是水平拆分,分区表需要在建表的需要加上分区参数,用户需要在建表的时候加上分区参数;分区表底层由多个物理子表组成,但是对于代码来说,分区表是透明的。
SQL中的条件中最好能带上分区条件的列,这样可以定位到少量的分区上,否则就会扫描全部分区。
2、增加缓存
主要的思想就是减少对数据库的访问,缓存可以在整个架构中的很多地方;比如:数据库本身有就缓存,客户端缓存,数据库访问层对SQL语句的缓存,应用程序内的缓存,第三方缓存(如Redis等)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)