作者归档:SK

关于SK

服务器维护 服务器配置 服务器 维护 运维 网管 系统调优 网络调优 数据库优化

MySQL数据库性能优化之硬件瓶颈分析

我们在谈论基于硬件进行优化的时候,不能仅仅将数据库使用的硬件划分为主机和存储两部分,而是需要进一步对硬件进行更细的分解,至少也应该分解到如下范畴:

 主机

1. CPU:仅仅只能决定运算速度,即使是运算速度都还取决于与内存之间的总线带宽以及内存本身的速度。

2. 内存:大小决定了所能缓存的数据量,主要决定了热点数据的访问速度。

3. 磁盘:

3.1 大小:决定了你最终能存放多少数据量。

3.2 转速:决定了你每一次IO请求的延时时间,也就是决定了我们常说的IOPS和MBPS。

3.3 数目:磁盘数目决定了。

3.4 类型

3.4.1 机械:SAS or SATA or FC

3.4.2 SSD:磁盘 or PCI卡

4. Raid卡:

4.1 缓存:缓存大小对数据写入速度有较大影响,使用策略也会直接影响IO效率。

4.2 电池:电池充放电策略会影响到瞬时IO的波动。

5. 其他:如总线带宽等,决定了CPU与内存间数据传输效率,这一点很多时候关注较少,但也可能会出现瓶颈。

 存储

1. 内存:存储设备同样也有内存,用来存储前端主机访问的热点数据。存储的内存大小同样决定了热点数据的访问速度。

2. 磁盘:和主机磁盘类似。

3. 线路/环路带宽:环路带宽必须能够匹配磁盘带宽,至少不能少于磁盘所能输出的能力,否则就想被堵在高速收费站等待通行的车辆一样。

网络

1. 延时:不同的网络设备其延时会有差异,对于 OLTP 设备来说,延时自然是越小越好。

2. 吞吐量:对于数据库集群来说,各个节点之间的网络吞吐量可能直接决定集群的处理能力。

3. iops:对于 OLTP 系统,数据传输更多是以小IO多并发方式,有时候光有大带宽并不一定能满足需求。

硬件角度所能提供的处理能力,一定是上面所列的多个方面(这里仅仅只是主要部分,可能还有其他)共同决定的整体能力,任何一个方面出现瓶颈,都能导致整体性能上不去,也就是我们常说的木桶原理。

在以往的经验中,最容易出现性能瓶颈的地方主要会出现在以下几个方面:

IO资源方面瓶颈

出现 IO 资源方面瓶颈的时候,主要表现在服务器 iowait 很高,usr 占比较少,系统响应较慢,数据库中经常会存在大量执行状态的 session。

遇到 IO 资源方面的瓶颈,我们可以使用的硬件层面优化方案主要就是:

1. 增加内存加大可缓存的数据量:这个方案能否达到效果取决于系统热点数据的总量,毕竟内存的成本也是比较高的,而且单台设备所能管理的内存量也是有限的。

2. 改善底层存储设备的 IO 能力:如本文前面所述,底层存储能力的改善同时取决于多个方面,既有单个磁盘本身的能力问题,也包括磁盘数目方面的策略,同时还受到存储自身以及存储和主机之间的带宽限制。所以在优化底层存储能力的同时需要同时考虑到这3方面的因素,做好总体分析和局部的平衡。

 CPU资源方面瓶颈

当 CPU 方面资源遇到瓶颈的时候,主要表现在服务器CPU利用率中 usr 所占比例很高,iowait却很小。这类问题大多出现在数据量并不是太大,同时又有足够内存来对数据进行缓存的应用场景。同时也是目前大多数中小网站所面临的数据库性能瓶颈。

当遇到 CPU 方面的资源瓶颈的时候,可能由两个方面造成:

1. 过多依赖数据库进行逻辑运算:对于这种状况,最好的优化方式是将运算尽可能从数据库端迁移到应用端,降低数据库主机的计算量。毕竟对有状态的系统设备(数据库)进行扩容的成本远高于无状态类系统设备(应用)。当然如果非要从数据库端的硬件来解决问题,那就只有通过增加设备CPU数目(如果支持),或者是使用CPU能力更为高端的主机来替换老主机。

2. 数据库逻辑IO太大:对于这类状况,从硬件角度来说能做的就只有提升CPU处理能力。要么增加 CPU 数目(如果支持),要么换CPU更强劲的主机。但是在这之前,还是建议先尝试从应用角度优化看看是否能够尽量降低非必要请求或者是减少每次请求的数据量。同时从数据库角度针对 Schema结构以及索引进行相应的优化调整,尽可能让完成一次请求所需要检索的数据量更小,从而达到降低逻辑IO的目的。

网络资源方面的瓶颈

一般来说应用与数据库之间的网络交互所需的资源并不是非常大,所以这个环境遇到瓶颈的可能并不是非常大。但是在分布式的集群环境中,各个数据库节点之间的网络环境经常会称为系统的瓶颈。

比较常见的场景如 MySQL Cluster 或者是 Oracle RAC 环境中,节点之间的数据交换网络环境的优劣可能直接影响到系统的整体处理能力,因为在节点间会存在大量的数据交换,都是依赖网络传输来完成。

在这样的场景中,廉价一点的解决方案是通过 万兆交换机 来替换现在常用的 千兆交换机 来提升网络处理能力降低网络延时。不过这个方案主要提升的是吞吐量方面,对于延时方面的提升可能并不一定能满足某些要求非常高的场景。这时候就该考虑使用更为昂贵但也更高效的方案:用 Infiniband 替换普通交换机来极大的降低网络方面所带来的数据交换延时。

Percona Server5.5.x安装配置

Percona 为 MySQL 数据库服务器进行了改进,在功能和性能上较 MySQL 有着很显著的提升。该版本提升了在高负载情况下的 MyIsAM 的性能、为 DBA 提供一些非常有用的性能诊断工具;另外有更多的参数和命令来控制服务器行为。
1、
安装依赖包

yum install make gcc gcc-c++ ncurses ncurses-devel bison

2、下载源码,编译安装

wget http://www.percona.com/redir/downloads/Percona-Server-5.5/Percona-Server-5.5.27-28.1/source/Percona-Server-5.5.27-rel28.1.tar.gz

tar zxvf Percona-Server-5.5.27-rel28.1.tar.gz

cd Percona-Server-5.5.27-rel28.1

设置变量、创建安装路径:

INSTALL_PATH=/data/usr/percona #设置安装路径

创建mysql组和用户

useradd -r -M -s /sbin/nologin mysql

编译安装:

cmake . \

-DCMAKE_BUILD_TYPE=RelWithDebInfo \

-DBUILD_CONFIG=mysql_release \

-DFEATURE_SET=community \

-DWITH_EMBEDDED_SERVER=OFF \

-DCMAKE_INSTALL_PREFIX=$INSTALL_PATH \

make && make install

3、配置

chown -R msyql:mysql /data/usr/percona

安装系统表:

cd /data/usr/percona

sh scripts/mysql_install_db –user=mysql

chown -R root /data/usr/percona

chown -R mysql:mysql /data/usr/percona/data

配置my.cnf配置文件:

cp support-files/my-medium.cnf /etc/my.cnf

配置mysqlservice服务:

cp support-files/mysql.server /etc/init.d/mysql.server

chmod a+x /etc/init.d/mysql.server

chkconfig –add mysql.server

修改mysqlroot密码:

/data/usr/percona/bin/mysqladmin -uroot password ‘password’

4、启动mysql

/data/usr/percona/bin/mysqld_safe –user=mysql &

验证启动是否成功:

netstat -tunlp|grep 3306

实现VM随Xenserver主机自动启动

XS6.0实现VM随主机自动启动的解决办法

针对Linux虚拟机
1. 设置虚拟机所在的POOL支持auto_poweron
Enable the VM auto start feature on a pool :
xe pool-param-set uuid=… other-config:auto_poweron=true

2. 设置Linux虚拟机auto_poweron
Then on each VM you want to auto start you would execute:
xe vm-param-set uuid=… other-config:auto_poweron=true
针对Windows主机,可能上述设置对Windows主机不起作用,可以附加
add to your /etc/rc.local:(在XS的/etc/rc.local文件中添加如下代码)

sleep 20
xe vm-start uuid=<vm1 uuid>

sleep 20
xe vm-start uuid=<vm2 uuid>

sleep 20
xe vm-start uuid=<vm3 uuid>

 

uuid的获得xe vm-list

XenServer多网卡绑定

xenserver通过 XenCenter可以绑定网卡,支持Active-Active和Active-Standby的模式,但是通过Xencenter只能绑定两块网卡为一组。更多的比如3块一组、4块一组,却不能在这里实现,这时候需要通过CLI进行操作。

在开始对多个网卡进行绑定之前,我们需要了解一下XenServer中关于绑定的一些处理方法和流程。

首先,在XenServer中创建一个Network对象,最后Bond会关联到该对象,并分配给VM
规划要绑定的物理网卡以及绑定模式
创建绑定(bond-create),关联Network对象即可
我们在使用XenCenter创建绑定的时候,会自动的完成上面的过程,但是通过CLI来创建绑定,我们就需要手动来创建相关的对象了,同时我也会列出相关的截图,方便理解。 继续阅读

XenServer虚拟机的导入和导出

1.准备好NFSserver 在此不谈

2.在迁移和被迁移的主机上挂载nfs(读写权限)

3.开始导出 先把要导出的VM关掉,然后查看要导出VM的uuid

xe vm-list params=all

xe vm-export filename=/nfs/vm/centos6.xva vm=<vm_name>

4.XenServer主机2上操作导入

xe vm-import filename=/nfs/vm/centos6.xva

xenserver添加新硬盘

1.根据需要做好阵列

2.进入系统得到各自设备的名称

3.是用lvm创建LVM分区 pv、vg和lv

4.然后挂载LVM磁盘到系统中

xe sr-create type=lvm content-type=user device-config:device=/dev/vg0/lv0 name-label=”lv0″

5.xencenter中storage标签中即可看到lv0

数据库安全漏洞浅析

数据库漏洞的种类繁多和危害性严重是数据库系统受到攻击的主要原因,通过研究数据库漏洞分类,有助于人们对漏洞的深入理解并加以预防和避免。

美国Verizon就“核心数据是如何丢失的”做过一次全面的市场调查,结果发现,75%的数据丢失情况是由于数据库漏洞造成的,这说明数据库的安全非常重要。
据CVE的数据安全漏洞统计,Oracle、SQL Server、MySQL等主流数据库的漏洞逐年上升,以Oracle为例,当前漏洞总数已经超过了1200多个。

数据库安全漏洞从来源上,大致可以分为四类:缺省安装漏洞、人为使用上的漏洞、数据库设计缺陷、数据库产品的bug。

继续阅读

VPS独享主机技术原理

VPS主机是通过虚拟化技术实现的虚拟主机,虚拟化是一个抽象层,它将物理硬件与操作系统分开,从而提供更高的IT资源利用率和灵活性。

虚拟独享服务器(VPS主机)的主流的虚拟化技术分为3种:

1、全虚拟化:如VMware、Hyper-V

2、半虚拟化:如Xen

3、操作系统虚拟化:如Virtuozzo

·基于4种虚拟化技术的VPS主机

针对通过虚拟技术实现的虚拟化抽象层,VMware、Hyper-V、Xen、Virtuozzo分别从不同的方面使用了不同的技术原理,来达到这一相同的目的。

·4种虚拟化技术的VPS主机优缺点

VPS主机是高端虚拟主机用户的最佳选择。不再受其他用户影响,得到的是更加公平的资源分配,远远低于虚拟主机的故障率。虚拟专用服务器(VPS主机)确保所有资源为用户独享,给用户最高的服务品质保证,让用户以虚拟主机的价格享受到独立主机的服务品质。

根据不同的VPS虚拟技术原理,进行优缺点、应用范围进行综合考虑,这样才能选择最适合自己的VPS主机产品。

Linux下查看IO繁忙的进程ID

开启IO监控:

sysctl vm.block_dump=1
#或
echo 1 >/proc/sys/vm/block_dump

开启后内核会将IO读写dump到日记,用dmesg查看:

dmesg

进程读写block到磁盘dm-0:

mysqld(7822): READ block 78196624 on dm-0
kjournald(529): WRITE block 211136 on dm-0
bash(8336): dirtied inode 7391146 (dmesg) on dm-0

统计当前占用IO最高的10个进程:

dmesg |awk -F: ‘{print $1}’|sort|uniq -c|sort -rn|head -n 10

php5.2到PHP 5.3的一些变化

php 5.2.x to php 5.3.x的一些变化

PHP 5.3 开始,为了更好的向 PHP 的未来版本(PHP6) 过渡,将未来不再支持的函数标记为 DEPRECATED。在代码中使用这些函数,将毫不留情的在页面中显示警告信息:“使用了过时的函数…”,诸如此类。
那么如何面向未来,让现有的 PHP 程序平滑的向下一代 PHP 引擎过渡呢?

配置文件迁移

PHP 5.3 开始,配置文件 php.ini 中的一些配置将会在 PHP 执行时显示过时警告,这些配置将在 PHP6中不再存在,相关功能也将关闭。

define_syslog_variables
register_globals
register_long_arrays
safe_mode
magic_quotes_gpc
magic_quotes_runtime
magic_quotes_sybase
函数迁移

涉及到的主要的函数迁移如下: 继续阅读