• mysql ndb笔记


    ---from mysql性能调优与架构+自己笔记

    1,大致环境

    SQLNode1:192.168.70.1

    SQLNode2:192.168.70.2

    StorageNode1:192.168.70.3

    StorageNode2:192.168.70.4

    ManageNode1:192.168.70.5

    2,ndb编译

    //安装SQL节点(SQLNode)

    [root@server /]#./configure --prefix=/usr/local/mysql --without-debug --without-bench \
    --enable-thread-safe-client --enable-assembler --with-charset=utf8 \
    --with-extra-charsets=complex --with-client-ldflags=-all-static \
    --with-MySQLd-ldflags=-all-static --with-ndbcluster --with-server-suffix=-MAX \
    --datadir=/data/mysqldata --with-unix-socket=/usr/local/mysql/sock/mysql.sock

    [root@server /]#make

    [root@server /]#make install

    2,编辑/etc/my.conf

    [client]

    socket=/usr/local/mysql/sock/mysql.sock

    [MySQLd]
    socket = /usr/local/mysql/sock/mysql.sock
    ndbcluster

    [MySQL_cluster]

    ndb-connectstring = 192.168.70.5

    [root@server /]#cd /usr/local/mysql

    [root@server mysql]# bin/mysql_install_db --user=mysql --socket=/usr/local/mysql/sock/mysql.sock

    [root@server mysql]#chown -R root .

    [root@server mysql]#chgrp -R mysql .

    [root@server mysql]#chown -R mysql.mysql /usr/local/mysql/etc

    [root@server mysql]#chown -R mysql.mysql /usr/local/mysql/sock

    [root@server mysql]#chown -R mysql.mysql /usr/local/mysql/log

    //安装NDB存储节点(StorageNode)

    在mysql官方用rpm包安装

    编辑/etc/my.conf

    [MySQL_cluster]

    ndb-connectstring = 192.168.70.5

    //安装管理节点(ManageNode)

    管理节点需要ndb_mgm和ndb_mgmd两个程序即可。在mysql节点的安装目录中得bin目录下可以找到。

    配置文件/var/lib/mysql-cluster/config.ini

    [NDB DEFAULT]

    NoOfReplicas=2

    DataMemory=64m

    IndexMemory=16m

    [TCP_DEFAULT]

    portnumber=2202

    [NDB_MGMD]

    id=1

    hostname=192.168.70.5

    datadir=/var/lib/mysql-cluster

    [NDBD]

    id=2

    hostname=192.168.70.3

    datadir=/data/mysqldata

    [NDBD]

    id=3

    hostname=192.168.70.4

    datadir=/drbddata/mysqldata

    [MySQLD]

    id=4

    hostname=192.168.70.1

    [MySQLD]

    id=5

    hostname=192.168.70.2

     //测试搭建环境

    NDB管理

    1,各节点启动与关闭

    启动顺序:管理节点--->NDB节点--->SQL节点。

    //启动管理节点

    [root@server /]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini

    //启动用于存储数据的ndb节点

    要启动存储节点,必须在每一台ndb 节点主机上面都执行ndbd 程序,如果是第一次启动,则需要添加--initial 参数,以便进行ndb 节点的初始化工作。但是,在以后的启动过程中,是不能添加该参数的,否则ndbd 程序会清除在之前建立的所有用于恢复的数据。
    文件和日志文件

    [root@server /]# ndbd --initial

    //启动SQL节点

    [root@server /]#mysqld_safe --user=mysql &

    节点状态检查

    通过ndb_mgm来查看各节点状态

    [root@server /]#ndb_mgm -e show

    节点的关闭操作
    在MySQL Cluster 环境中,NDB 节点和管理节点的关闭都可以在管理节点的管理程序中
    完成,但是SQL 节点却没办法。

    所以,在关闭整个MySQL Cluster 环境或者关闭某个SQL节点的时候,首先必须到SQL 节点主机上来关闭SQL 节点程序。关闭方法和MySQL Server的关闭一样,就不累述。而NDB 节点和管理节点则都可以在管理节点通过管理程序来完成。

    ndb_mgm>shutdown

    基本优化思路

    由于mysql cluster是一个分布式的数据库系统,与单机mysql server在优化方面区别主要体现在:各节点之间的协作配置以及网络环境相关的优化。访问需要经过超过一个节点(一个SQL节点和一个NDB节点)才能完成,所以各节点之间的协作配合就显得尤为重要。

    1,各节点之间存在的大量的数据通讯,mysql cluster支持(tcp/ip,sci socket等方式)来进行互联,还支持myrinet,infiniband,via接口。

    2,sql节点和ndb主机性能应该匹配。

    数据库性能状态

    QPS(每秒Query 量):这里的QPS 实际上是指MySQL Server 每秒执行的Query
    总量,在MySQL 5.1.30 及以下版本可以通过Questions 状态值每秒内的变化量
    来近似表示,而从MySQL 5.1.31 开始,则可以通过Queries 来表示。Queries 是
    在MySQL 5.1.31 才新增的状态变量。主要解决的问题就是Questions 状态变量
    并没有记录存储过程中所执行的Query(当然,在无存储过程的老版本MySQL 中
    则不存在这个区别),而Queries 状态变量则会记录。二者获取方式:

    QPS=questions(or queries)/Seconds

    mysql> SHOW /*!50000 GLOBAL */ STATUS like 'Queries';
    mysql> SHOW /*!50000 GLOBAL */ STATUS like 'Questions';

     TPS(每秒事务量): 在MySQL Server 中并没有直接事务计数器,我们只能通过
    回滚和提交计数器来计算出系统的事务量。

    TPS = (Com_commit + Com_rollback) / Seconds
    如果我们还使用了分布式事务,那么还需要将Com_xa_commit 和
    Com_xa_rollback 两个状态变量的值加上。
    //Key Buffer 命中率:Key Buffer 命中率代表了MyISAM 类型表的索引的Cache命中率。该命中率的大小将直接影响MyISAM 类型表的读写性能。Key Buffer 命中率实际上包括读命中率和写命中率两种,MySQL 中并没有直接给出这两个命中率的值,但是可以通过如下方式计算出来:

    key_buffer_read_hits = (1 - Key_reads / Key_read_requests) * 100%

    key_buffer_write_hits= (1 - Key_writes / Key_write_requests) * 100%

    获取所需状态变量值:
    mysql> SHOW /*!50000 GLOBAL */ STATUS LIKE 'Key%';

    //Innodb Buffer 命中率:这里Innodb Buffer 所指的是innodb_buffer_pool,也就是用来缓存Innodb 类型表的数据和索引的内存空间。

    MySQL Server 提供的相应状态值计算出其命中率:
    innodb_buffer_read_hits=(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100%

    mysql>SHOW /*!50000 GLOBAL*/ STATUS LIKE 'Innodb_buffer_pool_read%';

    //Query Cache 命中率:如果我们使用了Query Cache,那么对Query Cache 命中率进行监控:

    Query_cache_hits= (Qcache_hits / (Qcache_hits + Qcache_inserts)) * 100%

    mysql>SHOW /*!50000 GLOBAL*/ STATUS LIKE 'Qcache%';

    Table Cache 状态量:Table Cache 的当前状态量可以帮助我们判断系统参数table_open_cache 的设置是否合理。如果状态变量Open_tables 与Opened_tables 之间的比率过低,则代表Table Cache 设置过小,个人认为该值处于80% 左右比较合适。注意,这个值并不是准确的Table Cache 命中率。获取所需状态变量值:

    mysql>SHOW /*!50000 GLOBAL*/ STATUS LIKE 'Open%';

    Thread Cache 命中率:Thread Cache 命中率能够直接反应出我们的系统参数thread_cache_size 设置的是否合理。一个合理的thread_cache_size 参数能够节约大量创建新连接时所需要消耗的资源。Thread Cache 命中率计算方式如下:

    Thread_cache_hits = (1 - Threads_created / Connections) * 100%

    mysql>SHOW /*!50000 GLOBAL*/ STATUS LIKE 'Thread%';

    锁定状态:锁定状态包括表锁和行锁两种,我们可以通过系统状态变量获得锁定总次数,锁定造成其他线程等待的次数,以及锁定等待时间信息。

    mysql>SHOW /*!50000 GLOBAL*/ STATUS LIKE '%lock%';

    复制延时量:复制延时量将直接影响了Slave 数据库处于不一致状态的时间长短。如果我们是通过Slave 来提供读服务,就不得不重视这个延时量。在Slave 节点上执行:

    mysql> show slave status\G;

    取Seconds_Behind_Master 项的值来了解Slave 当前的延时量(单位:秒);


    Tmp table 状况:Tmp Table 的状况主要是用于监控MySQL 使用临时表的量是否过多,是否有临时表过大而不得不从内存中换出到磁盘文件上;

    mysql> SHOW /*!50000 GLOBAL*/ STATUS LIKE 'Created_tmp%';
    +-------------------------+-------+
    | Variable_name           | Value |
    +-------------------------+-------+
    | Created_tmp_disk_tables | 1184  |
    ....
    | Created_tmp_tables      | 2241  |
    +-------------------------+-------+

     从中可以发现2241次使用临时表,其中1184次临时表比较大,无法在内存中完成,必须使用磁盘文件。如果Created_tmp_disk_tables非常大,可能是系统中排序操作过多,或者表连接方式不是很优化。如果Created_tmp_disk_tables/ Created_tmp_tables比率超过10%,考虑tmp_table_size参数设置过小:

    mysql> show variables like 'tmp_table_size';  
    +----------------+----------+
    | Variable_name  | Value    |
    +----------------+----------+
    | tmp_table_size | 16777216 |
    +----------------+----------+

     Binlog Cache 使用状况:Binlog Cache 用于存放还未写入磁盘的Binlog 信息。

    mysql> SHOW /*!50000 GLOBAL*/ STATUS LIKE 'Binlog_cache%';
    +-----------------------+-------+
    | Variable_name         | Value |
    +-----------------------+-------+
    | Binlog_cache_disk_use | 219   |
    | Binlog_cache_use      | 301   |

    如果Binlog_cache_disk_use 值不为0,则说明Binlog Cache 大小可能不够,建议增加binlog_cache_size 系统参数大小。

    Innodb_log_waits 量:Innodb_log_waits 状态变量直接反应出Innodb Log Buffer 空间不足造成等待的次数。

    mysql>SHOW /*!50000 GLOBAL*/ STATUS LIKE 'Innodb_log_waits';

    该变量值发生的频率将直接影响系统的写入性能,所以当该值达到每秒1 次时就该增加系统参数innodb_log_buffer_size 的值.

    存储引擎支持事务

    InnoDB:通过MVCC支持事务,允许COMMIT、ROLLBACK和保存点。

    NDB:通过MVCC支持事务,允许COMMIT和ROLLBACK。

    BDB:支持事务,允许COMMIT和ROLLBACK

  • 相关阅读:
    spring04
    kepp running 团队视频分析初步总结
    spring03
    第六周学习进度博客
    spring02
    spring初级java 应用。搭建环境。基本语法
    给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表
    团队项目-运动App
    第五周学习进度博客
    java编写规范
  • 原文地址:https://www.cnblogs.com/alang85/p/2252261.html
Copyright © 2020-2023  润新知