最专业的八方代购网站源码!

资讯热点
MySQL高度重视的性能调优技巧

发布时间:2019-10-2 分类: 电商动态

万圣节已经存在了很长时间,现在是时候专注于即将到来的假日季节。第一个是感恩节,接着是黑色星期五和网络星期一,最后是圣诞节/节日周(从12月26日的节礼日开始,到12月31日的新年前夜结束为期六天或更长时间。发明由零售业在2000年代中期左右,试图延长他们的节礼日销售额达到购物高潮。对于企业主来说,今年的这一年标志着期待已久的获利回吐的终结。对于一些DBA来说,它会带来恐惧,不安甚至不眠之夜,他们会尝试让系统重新上线。

幸运的是,事实并非如此。通过对MySQL性能变量进行一些主动调整,可以保护数据库服务器免受购物季节增加的需求。

提示1:确定MySQL的最大连接数

对于与MySQL的最大连接数,最好一次向Web服务器发送5个请求。 Web服务器的5个请求中的一些将用于CSS样式表,图像和脚本等资源。由于浏览器缓存等原因,很难获得准确的MySQL到Web服务器请求比率;要获得确切的数字,您需要分析Web服务器的日志文件。例如,您可以手动访问Apache的“access_log”日志文件,也可以通过Analog或Webalizer等实用程序访问日志文件。

对特定用例进行准确估计后,将该比率乘以与Web服务器的最大连接数。例如,如果Web服务器配置为最多提供256个客户端,并且MySQL请求与Web请求的比率为1/8,则最好将最大数据库连接数设置为32.还要考虑保留安全边际,将此数字乘以2即可得到最终数量。只有当基础结构支持它时,才能尝试将最大数据库连接数与Web服务器的客户端限制相匹配。在大多数情况下,最好保持接近32。

在Monyog中查看MySQL连接

在MySQL数据库中,MySQL的最大并发连接数存储在全局变量max_connections中。 Monyog报告变量< ;; MAX_CONNECTIONS”的是“允许的最大”数当前连接监视组中的指示符。它还将数字除以打开的连接数以生成连接使用百分比:

还有一个连接历史记录监视器,可帮助计算最佳并发连接数。它包括尝试次数,拒绝次数和成功连接次数。此外,允许显示的最大度量标准的百分比显示为进度条,允许您快速评估服务器过去达到的最大并发连接数:

技巧2:为临时表分配足够的内存

在某些情况下,服务器在处理语句时会创建内部临时表。临时表用于内部操作,例如GROUP BY和distinct,以及UNION和FROM子句(派生表)中的一些ORDER BY查询和子查询。这些都是在内存中创建的内存表。内存中临时表的最大大小由tmp_table_size和max_heap_table_size中较小的一个确定。如果临时表的大小超过此阈值,则会将其转换为磁盘上的InnoDB或MyISAM表。此外,如果查询涉及BLOB或TEXT列,并且这些列无法存储在内存表中,则临时表始终直接指向磁盘。

此转换很昂贵,因此请考虑增加max_heap_table_size和tmp_table_size变量的大小,以帮助减少在磁盘上创建的临时表的数量。请记住,这将需要大量内存,因为内存中临时表的大小是基于“最坏情况”的。例如,内存中的表始终使用固定长度的列,因此字符列使用VARCHAR(255)。这可以使内存中的临时表比你想象的要大得多 - mdash;实际上,这比查询表的总大小要大很多倍!增加max_heap_table_size和tmp_table_sizevariables的大小时,请务必监视服务器的内存使用情况。因为内存中的临时表可能会增加达到服务器内存容量的风险。

通常,建议使用32M到64M的值,从这两个变量开始并根据需要进行调整。

Monyog的临时监视监控

临时表监控是许多预定义的Monyog监控之一。它提供了临时表使用的一些指标,包括:

允许的最大值:显示tmp_table_size服务器变量的值,该变量定义在内存中创建的临时表的最大大小。与max_heap_table_size一起,此值定义可在内存中创建的临时表的最大大小。如果内存临时表大于此大小,请将其存储在磁盘上。内存表的最大大小:显示max_heap_table_size服务器变量的值,该变量定义显式创建的MEMORY存储引擎表的最大大小。创建的临时表总数:显示created_tmp_tables服务器变量的值,该变量定义在内存中创建的临时表的数量。在磁盘上创建的临时表:显示created_tmp_disk_tables服务器变量的值,该变量定义在磁盘上创建的临时表的数量。如果此值很高,则应考虑增加tmp_table_size和max_heap_table_size的值以增加创建的临时内存表的数量,从而减少在磁盘上创建的临时表的数量。磁盘:总比率:基于created_tmp_disk_tables的计算值除以created_tmp_tables。由于tmp_table_size或max_heap_table_size不足而在磁盘上创建的临时表的百分比。 Monyog将此数字显示为进度条和百分比,以快速确定临时表使用的磁盘数量,而不是内存。趋势图可用于创建总表,即磁盘上创建的表和磁盘的总比率。让我们看看它们如何随着时间的推移而发展:

技巧3:增加线程缓存大小

连接管理器线程处理服务器侦听的网络接口上的客户端连接请求。连接管理器线程将每个客户端连接与专用于它的线程相关联,该线程负责处理连接的身份验证和所有请求处理。因此,线程与当前连接的客户端之间存在一对一的比率。确保线程缓存足够大以容纳所有传入请求非常重要。

MySQL提供了许多与连接线程相关的服务器变量:

线程高速缓存大小由thread_cache_size系统变量确定。默认值为0(无缓存),这会导致为每个新连接设置一个线程,并在连接终止时需要处理。如果您希望服务器每秒接收数百个连接请求,则应将thread_cache_size设置得足够高,以便大多数新连接可以使用缓存线程。可以在服务器启动或运行时设置max_connections的值。

您还应该监视缓存中的线程数(Threads_cached)以及创建的线程数,因为无法从缓存中获取线程(Threads_created)。关于后者,如果Threads_created每分钟继续增加多个线程,请考虑增加thread_cache_size的值。

使用MySQL show status命令显示MySQL变量和状态信息。以下是一些例子:

显示全局状态如'%Threads_connected%'; + ------------------- + ------- + | Variable_name |价值| + ----- -------------- + ------- + | Threads_connected | 2 | + ------------------- + - ------ +显示全球状态'%Threads_running%'; + ----------------- + ------- + | Variable_name |价值| + ----------------- + ------- + | Threads_running | 1 | + ----------------- + ------- +

Monyog线程缓存监控

Monyog提供了一个监视线程缓存的屏幕,称为“线程”。与MySQL线程关联的服务器变量映射到以下Monyog度量标准:

Thread_cache_size:可以缓存的线程数。

Threads_cached:缓存中的线程数。

Threads_created:创建线程来处理连接。

Monyog Threads屏幕还包括Thread Cache Hit Ratio指示器。这是线程缓存命中率的指示器。如果值较低,则应考虑增加线程缓存。该值在状态栏中显示为百分比;它的价值越接近100%越好。

如果这些度量标准的值等于或超过指定值,则可以将每个度量标准配置为发出警告和/或严重警报。

其他相关的服务器变量

除上述指标外,还应监控以下内容:

InnoDB缓冲池大小:InnoDB缓冲池大小在使用InnoDB的MySQL数据库中起着至关重要的作用。缓冲池缓存数据和索引。它的值应该尽可能大,以确保数据库使用内存而不是硬盘驱动器进行读取操作。临时表大小:MySQL使用较小的maxheaptablesize和tmptable_size来限制内存中临时表的大小。具有更大的值可以帮助减少在磁盘上创建的临时表的数量,但它也会增加服务器内存容量的风险,因为此度量标准适用于每个客户端。通常,建议使用32M到64M,从这两个变量开始并根据需要进行调整。 InnoDB日志缓冲区大小:每次MySQL写入日志文件时,它都会利用可用于处理销售数据的重要系统资源。因此,将InnoDB日志缓冲区大小设置为更大的值是有意义的。这减少了服务器在大型事务中写入磁盘的次数,从而最大限度地减少了这些耗时的操作。 64M是这个变量的一个很好的起点。结论

虽然即使是最大的企业代购源码网站也因宕机而遭受损失,但这种影响对于处理在线销售的中小型企业尤其重要。根据最近的调查报告,一分钟的停机时间导致该公司平均损失约5,000美元。不要让您的业务成为这种统计数据的一部分(因为停机造成的损失)。主动调整MySQL数据库服务器(S)并在假期繁忙之前获得回报!

« 原始时代?百度熊掌号原保护严重处罚 | 热门搜索引擎优化:利用百度经验丰富的平台,免费发送高质量的外部链接! »