高性能 PHP7 * 提升数据库性能

数据库在动态网站中扮演着一个关键的角色,所有流入流出的数据都会和数据库进行交互。因此,如果PHP应用的数据库没有进行较好的设计或优化,其性能将会受到非常大的影响。

MySQL数据库

MySQL安装完成后的默认设置所提供的性能并不是最优的,我们总有办法对其进行进一步优化,提升 性能。切记,数据库设计是影响性能的关键因素,设计很糟糕的数据库会对整个性能造成严重影响。

查询缓存(Query Caching)

查询缓存是MySQL的一个重要性能特性,它缓存了SELECT查询及其结果数据集。当一个同样的 SELECT查询发生时,MySQL从内存中直接取出结果,这样就加快了查询的执行速度,同时减小了数据库 的压力。

若要查看MySQL服务器上的查询缓存是否已经打开,要在MySQL命令行界面执行以下命令。

SHOW VARIABLES LIKE 'have_query_cache';

若要开启查询缓存,可以打开my.cnf文件,并输入以下内容。如果已经有这些内容但是包含注释,则 去除注释即可。

query_cache_type = 1 
query_cache_size = 128MB 
query_cache_limit = 1MB 

保存my.conf文件,重启MySQL服务器。

存储引擎(表类型)

MySQL提供9个存储引擎,使用最广泛的是MyISAM和InnoDB。

MyISAM

为速度而设计,和Select搭配起来使用更好,如果表的数据偏向于静态,使用MyISAM最好。

  • MyISAM支持表级锁。
  • MyISAM支持全文搜索。
  • MyISAM数据压缩、自我复制、查询缓存、数据加密。
  • MyISAM不支持外键。
  • MyISAM不支持事务。
  • MyISAM支持集群数据库。

InnoDB(默认存储引擎)

为高可靠性和高性能而设计的,适合处理大量数据。

  • InnoDB支持行级锁。
  • InnoDB支持外键。
  • InnoDB支持事务。
  • InnoDB数据压缩、自我复制、查询缓存、数据加密。
  • InnoDB可以用在集群环境下,但是并没有完全支持,不过InnoDB表可以完全转换为NDB存储引擎,这样既可用于集群环境。

Percona 数据库和 Percona XtraDB 存储引擎

Percona 是免费、开源的数据库,对于MySQL完全兼容且提供加强功能,可完全代替MySQL并能提供更好的文档、性能、扩展性。
Percona 由 MySQL 衍生,支持MySQL的所有特性,并在此基础上提供更多、更好的性能。Percona使用一种改进的存储引擎——XtraDB,它是InnoDB的加强版,有更多的特性和更快的速度,在现代硬件上有有着更好的扩展性,Percona XtraDB在高负载环境下使用内存的效率更高。
Percona只能在Linux系统上使用,目前不能在Windows系统上使用。具体安装可参考Percona安装手册

MySQL性能监控工具

phpMyAdmin 提供有视图工具查看 MySQL 性能状态;

Percona XtraDB集群(PXC)

Percona XtraDB集群提供了高性能的集群环境,能轻松配置和管理多台数据库服务器,使得数据库之 间能使用二进制日志来互相通信。集群环境能将负载分散到不同的数据库服务器中,并提供灾备,以防止服务器死机。

为了配置集群环境,我们需要以下服务器。

  • 第一台服务器IP 10.211.55.1,称为Node1。
  • 第二台服务器IP 10.211.55.2,称为Node2。
  • 第三台服务器IP 10.211.55.3,称为Node3。

1.在终端中执行如下命令,在 Node1 上安装Percona XtraDB集群。

apt-get install percona-xtradb-cluster-56 

安装将会启动,安装过程与普通的 Percona 服务器安装类似。安装过程中将会要求输入root用户的密码。

2.当安装完成后,我们需要创建一个拥有复制权限的新用户。登录进去,在 MySQL 终端执行以下命令。

# 创建了一个用户,用户名是sstpackt,密码是sstuserpassw
CREATE USER 'sstpackt'@'localhost' IDENTIFIED BY 'sstuserpassword'; 
# 设置并刷新权限
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstpackt'@' localhost';
FLUSH PRIVILEGES;

 3.打开 MySQL 配置文件 /etc/mysql/my.cnf,在mysqld区块下输入以下配置。

# 添加 galera 库
wsrep_provider=/usr/lib/libgalera_smm.so
# 添加集群节点地址
wsrep_cluster_address=gcomm://10.211.55.1,10.211.55.2,10.211.55.3
# binlog 格式为 ROW
binlog_format=ROW
# 默认存储引擎是 InnoDB
default_storage_engine=InnoDB
# InnoDB auto_increment 锁定模式设置为2,这是 galera 需要的
innodb_autoinc_lock_mode=2
# Node 1的地址
wsrep_node_address=10.211.55.1
# SST 模式
wsrep_sst_method=xtrabackup
# SST模式的验证,设置账号密码
wsrep_sst_auth="sstpackt:sstuserpassword"
# 为集群命名
wsrep_cluster_name=packt_cluster

 4.执行下面的命令,启动第一个节点。

/etc/init.d/mysql bootstrap-pxc 

该命令将启动第一个节点,也就意味着将初始的集群启动和运行起来,并决定哪一个节点带有正确的信息,以及哪一个节点将会同步给所有其他节点。因为 Node1 是集群的初始节点,并且创建了一个新用户,因此我们将只启动 Node1。

5.检查 Node1 启动状态。

SHOW STATUS LIKE '%wsrep%';

这将输出一个非常长的列表,其中一部分如下图所示。

6.现在,对所有节点重复步骤1和3。

需要为每个节点变更的唯一配置是 wsrep_ node_address,其值应该为节点的 IP 地址。对于每个节点来说,编辑 my.cnf 配置文件,在 wsrep_node_address 上设置节点的 IP 地址即可。

7.在终端中执行如下命令,开启两个新建的节点。

/etc/init.d/mysql start 

此时每个节点都可以通过重复步骤 7 来验证是否正常。

为了验证集群是否能正常工作,在某个节点上创建一个数据库并添加几张表,再向表中添加一些数 据。之后,在其他节点上检查新创建的数据库、表以及保存在每张表中的数据。如果正常,则所有这些数 据将会被同步到每个节点中。

Redis

Redis是开源的内存型键值存储系统,广泛用于数据库缓存。根据Redis网站(www.Redis.io)的介绍, Redis支持字符串、哈希表、队列、集合和有序集合,同时也支持主从复制和事务。

Memcached

Memcached是一个免费、开源、高性能、分布式的内存对象缓存系 统。Memcached属于内存型的键值存储,可以保存从数据库或者API调用获取的数据。

类似于Redis,Memcached也能用于加速网站。Memcached将数据(字符串和对象)保存到内存中,这 样可以减少和外部资源的交互,例如与数据库或API交互。

参考:《高性能PHP7,Learning PHP7 High Performance》

发布了46 篇原创文章 · 获赞 42 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Phplayers/article/details/103805786