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

原文地址:https://www.cnblogs.com/alang85/p/2252261.html