本文目录一览:
- 1、Linux系统下mysql运行慢,请给出分析方案!!
- 2、linux下,我安装的mysql没有innodb引擎,怎么加上
- 3、Linux里面mysql和mariadb区别是什么?
- 4、LINUX下的MYSQL怎么开启INNODB数据支持?
Linux系统下mysql运行慢,请给出分析方案!!
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 等。
linux下,我安装的mysql没有innodb引擎,怎么加上
首先确定,在mysql的’plugin_dir’下有ha_innodb_plugin.so和ha_innodb.so两个文件
查询’plugin_dir’的路径可以用以下命令
mysql show variables like ‘plugin_dir’;
+—————+———————————–+
| Variable_name | Value |
+—————+———————————–+
| plugin_dir | /usr/local/mysql/lib/mysql/plugin |
+—————+———————————–+
1 row in set (0.01 sec)
如果没有找到,在您的mysql编译目录里有下面的目录文件(内置的innodb和innodb_plugin)
storage/innobase/.libs/ha_innodb.so
storage/innodb_plugin/.libs/ha_innodb_plugin.so
您需要把它们(ha_innodb_plugin.so和ha_innodb.so)拷贝到mysql的plugin目录中(/usr/local/mysql/lib/mysql/plugin)
接下来就是在mysql命令行安装一下
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 5.1.36-log Source distribution
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql show engines;
+————+———+———————————————————–+————–+——+————+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+————+———+———————————————————–+————–+——+————+
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
+————+———+———————————————————–+————–+——+————+
4 rows in set (0.00 sec)
mysql INSTALL PLUGIN InnoDB SONAME ‘ha_innodb.so’;
Query OK, 0 rows affected (0.69 sec)
mysql show engines;
+————+———+————————————————————+————–+——+————+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+————+———+————————————————————+————–+——+————+
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
+————+———+————————————————————+————–+——+————+
5 rows in set (0.00 sec)
OK,大功告成
Linux里面mysql和mariadb区别是什么?
mariadb与mysql都属于同一类数据库管理系统。但是mariadb与mysql在使用范围和使用目的上都有所不同,两者的主要功能都是为了通过开源社区在维护中,从而获得GPL授权许可。从关系上来看,mariadb是属于数据库管理系统的开发和升级版本,它仅仅代表MySQL的一个分支。
1. mariadb与mysql的开发目的不同
mariadb是由MySQL的创始人主导开发,在他家公司MySQL卖给sun之后,又被甲骨文收购,这也就意味着MySQL的所有权,现在属于甲骨文网站。因而不得不另行开发mariadb想要通过功能完善,从而实现完全替代MySQL的产品,所以在使用的范围上两者是完全兼容的,并且前者的使用范围更广,他可以实行包括API和命令行,最终想要达到的目的是完全兼容MySQL。蒋丹来说,前者只是后者的一个替代品和升级产品,在开发过程将misqil的弊端进行兼容,从而实现整体SQL的升级。
2. mariadb与mysql的适用范围
Mariadb的客户端包括Dbedit和navi act系列windows,macos等数据库中的专有应用程序,以及在heidisql中,它能够支持mariadb的所有版本。通俗易懂的来讲,mariadb实现了对MySQL的完全兼容之后,还增添了许多新的功能,从而来让本地的非阻塞操作得到支持以及推动了进度报告。相对来说,mariadb的使用范围要大于MySQL,但是由于两者都在不断更新,最新的MySQL 5.4 innodb的性能也在不断提升,这也就意味着所有的MySQL的连接器应用程序同样可以在mariadb的操控工作,并且实现一个更加封闭的软件项目。
LINUX下的MYSQL怎么开启INNODB数据支持?
首先,你安装mysql已经支持innodb引擎才行,可以通过以下命令查看:
mysql show engines;
若结果中列Engine有innodb的记录,且列Support为”YES”则表示支持.
若列Engine有innodb的记录,但且列Support为”NO”,则说明你参数文件中屏蔽了innodb引擎的使用,你去参数配置文件中注释掉”#skip-innodb”项.
若列Engine没有innodb的记录,则表示你的版本没有支持innodb引擎,你必须去重新安装支持innodb引擎的版本(如果是自己编译安装的, 要加上innodb对应的参数).
确定你安装的mysql版本支持innodb后,你”表结构是MyISAM,并且里面有了一些数据,如果改成INNODB”很容易实现,可以直接用命令更新表的存储引擎即可,如:
alter table tb_name engine=innodb;(版本5.0后都可以用engine参数)
或
alter table tb_name type=innodb;(低版本中用type参数)
原创文章,作者:P0Q66,如若转载,请注明出处:https://www.506064.com/n/128880.html