分类 MYSQL 下的文章

PMM的简介及安装

一、简介

PERCONA MYSQL ,到底谁是受益者 - 云+社区 - 腾讯云 (tencent.com)

Percona Monitoring and Management (PMM)是一款开源的专用于管理和监控MySQL、MongoDB、PostgreSQL、ProxySQL、AWS RDS性能的开源平台,并且可以监控前述这些数据库所在的服务器资源,通过PMM客户端收集到的DB监控数据用第三方软件Grafana画图展示出来。

二、部署

uname -r

安装pmm2 要求内核版本大于3.10

2.1 docker安装

yum list all | grep docker
yum install docker

启动docker

systemctl start docker
systemctl enable docker

下载pmm2

docker pull percona/pmm-server:2

创建持久化包

docker create --volume /srv --name pmm-data percona/pmm-server:2 /bin/true

创建服务端

docker run -d -p 81:80 -p 9090:9090 -p 9094:9094 -p 9001:9001 -p 3000:3000 -p 8500:8500 -p 8600:8600 -p 443:443 -p 8880:8880 -p 9093:9093 -p 9911:9911 -p 9922:9922 -p 20201:20201 -p 20203:20203 --volumes-from pmm-data --name pmm-server -e METRICS_RETENTION=8760h -e METRICS_MEMORY=351881216 -e METRICS_RESOLUTION=3s -e DISABLE_TELEMETRY=true -e GF_AUTH_PROXY_ENABLED=true -e GF_AUTH_ANONYMOUS_ENABLED=true --restart always percona/pmm-server:2

查看安装情况

docker ps -a

启动服务

docker start pmm-server

下载客户端

docker pull percona/pmm-client:latest

运行客户端

PMM_SERVER=127.0.0.1:444
docker run --rm --name pmm-client -e PMM_AGENT_SERVER_ADDRESS=${PMM_SERVER} -e PMM_AGENT_SERVER_USERNAME=admin -e PMM_AGENT_SERVER_PASSWORD=admin -e PMM_AGENT_SERVER_INSECURE_TLS=1 -e PMM_AGENT_SETUP=1 -e PMM_AGENT_CONFIG_FILE=pmm-agent.yml --volumes-from pmm-client-data percona/pmm-client:latest

访问服务端

http://www.wukaiqiang.top:81/

默认账号admin密码admin
docker exec -it c4510784041c /bin/bash
bash-4.2$ pmm-admin add mysql --username=root --password=root --host 172.17.0.13 --port 3306

微信截图_20211027231929.png

最后一行的值
mapped 表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小,即ps出的vsz
writeable/private 表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小
shared 表示进程和其他进程共享的内存大小
循环显示进程2318 的设备格式的最后1行,间隔2秒,

[root@orcl:/root]$ while true; do pmap -d 2318 | tail -1; sleep 2; done
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K
mapped: 1805072K writeable/private: 8324K shared: 1558540K

mysql内存计算.zip
Mysql占用内存过高参数优化

计算mysql各项参数
http://www.mysqlcalculator.com/

key_buffer_size
指定索引缓冲区的大小,对MyISAM表起作用
query_cache_size 
查询缓存大小,默认改选项为关闭
tmp_table_size
临时表缓存
innodb_buffer_pool_size
innodb表的索引,数据,插入数据时的缓冲
innodb_additional_mem_pool_size
innodb 内部缓存
innodb_log_buffer_size
日志缓存
max_connections 
最大连接数,不超过16384
sort_buffer_size
connection级参数,在每个connection连接时分配
read_buffer_size 
MySQL读入缓冲区的大小
read_rnd_buffer_size 
随机读缓存
thread_stack 
连接线程分配空间
binlog_cache_size 
每个session的binlog缓存

1.内存优化原则

将尽量多的内存分配给MySQL做缓存,但要给操作系统和其他程序预留足够内存。
MyISAM存储引擎的数据文件读取依赖于操作系统自身的IO缓存,因此,如果有MyISAM表,就要预留更多的内存给操作系统做IO缓存。
排序区、连接区等缓存是分配给每个数据库会话(session)专用的,其默认值的设置要根据最大连接数合理分配,如果设置太大,不但浪费资源,而且在并发连接较高时会导致物理内存耗尽。

2.MyISAM 内存优化

myisam存储引擎使用 key_buffer 缓存索引块,加速myisam索引的读写速度。对于myisam表的数据块,mysql没有特别的缓存机制,完全依赖于操作系统的IO缓存。

  key_buffer_size:
    key_buffer_size决定MyISAM索引块缓存区的大小,直接影响到MyISAM表的存取效率。可以在MySQL参数文件中设置key_buffer_size的值,对于一般MyISAM数据库,建议至少将1/4可用内存分配给key_buffer_size。
    在/usr/my.cnf 中做如下配置:key_buffer_size=512M 

  read_buffer_size:
    如果需要经常顺序扫描myisam表,可以通过增大read_buffer_size的值来改善性能。但需要注意的是read_buffer_size是每个session独占的,如果默认值设置太大,就会造成内存浪费。

  read_rnd_buffer_size:

    对于需要做排序的myisam表的查询,如带有order by子句的sql,适当增加 read_rnd_buffer_size 的值,可以改善此类的sql性能。但需要注意的是 read_rnd_buffer_size 是每个session独占的,如果默认值设置太大,就会造成内存浪费。

3.InnoDB 内存优化

  innodb用一块内存区做IO缓存池,该缓存池不仅用来缓存innodb的索引块,而且也用来缓存innodb的数据块。

  innodb_buffer_pool_size:
    该变量决定了 innodb 存储引擎表数据和索引数据的最大缓存区大小。在保证操作系统及其他程序有足够内存可用的情况下,innodb_buffer_pool_size 的值越大,缓存命中率越高,访问InnoDB表需要的磁盘I/O 就越少,性能也就越高。
    innodb_buffer_pool_size=512M

  innodb_log_buffer_size:
    决定了innodb重做日志缓存的大小,对于可能产生大量更新记录的大事务,增加innodb_log_buffer_size的大小,可以避免innodb在事务提交前就执行不必要的日志写入磁盘操作。
    innodb_log_buffer_size=10M

转载链接https://www.cnblogs.com/roadlandscape/p/12808344.html,如侵权,请联系。

主从同步报错:column 0 of talbe 'XXX' cannot be converted from type 'varchar(120(bytes))' to type 'varchar(160(bytes)) utf8mb4
检查发现主库字符集是utf8,从库字符集是utf8mb4,因为从库采用逻辑恢复,创建数据库时指定的字符集类型错误导致。