单机单MySQL服务器处理数据库连接请求利用多线程机制,但正如任何处理方式一样都会有它的功能瓶颈。单机单MySQL服务器如何提高处理瞬时成千上万的数据库连接请求呢? 首先,我们从MySQL服务器的工作原理出发来思考问题。MySQL服务器利用多线程机制来充分发挥对多用户访问的支持,首先它分析客户发送过来的连接字符串,在数据库连接的线程缓存中寻找是否有这样的线程可以支持处理这一连接访问请求,如果存在就激活它;否则就新建一个线程来处理客户的访问连接请求。当多个数据库连接请求访问的是同一个数据库对象或者是同一部分数据,就会触发同步机制使得一些请求处于等待状态。 这就引出两个问题,首先是MySQL服务器是否可以虚拟为多个服务器来提供对数据库连接请求的处理?再就是如何对客户请求的资源进行快速响应,减少等待的时间。 第一个问题,通过开放多个端口来实现。同一服务上开启多个MySQL端口有两种方式,一种是在编译的时候指定特定端口,第二是修改配置文件来达到监听多个端口的目的。通过对MySQL_multi.conf修改可以实现第二种方式。MySQLd_multi可以管理多个帧听不同Unix套接字文件和TCP/IP端口的连接的MySQLd 进程。它可以启动或停止服务器,或报告它们的当前状态。程序寻找my.cnf中的[MySQLdN]组(或--config-file选项指定的文件)。N 可以为任何正整数。 同时,在my.cnf配置文件中对以下各参数进行适当的设置。首先是与网络连接的性能配置项。 Max_connections:整个MySQL允许的最大连接数。 如果客户的连接请求数超过max_connections,就会产生大量连接请求的等待,所以应该在主机性能允许的情况下,将该参数设置的尽可能大一些。 Max_user_connections:每个用户允许的最大连接数。 Net_buffer_length:网络包传输中,传输消息之前的net buffer初始化大小。 Max_allowed_packet:在网络传输中,一次消息传输量的最大值 Back_log:在MySQL的连接请求等待队列中允许存放的最大连接请求数。 再次是与连接线程相关的系统参数及状态变量 Thread_cache_size:Thread Cache池中应该存放的连接线程数。 Thread_stack:每个连接线程被创建时,MySQL给它分配的内存大小。 第二个问题,主要通过以下几个方面来处理 第一, 适当分库。根据业务划分多个数据库,即database。通过SQL命令 show databases可以显示所有的数据库。这样可以将数据资源的访问进行有效地均衡,使得在各个业务数据的访问之间减少干扰,这样通过访问字符串进行数据库连接的时候也可以更为有效的利用MySQL的多线程机制。而且,通过这样的处理,也有效减少了对同一部分数据的访问。 第二,对MySQL进行Query Cache优化。 |