若相依 发表于 2015-1-16 22:24:38

MYSQL网页编程之从MySQL失掉最年夜的优化功能

使用DBaaS能让收入损失从其他业务上得到弥补,如软件更新和硬件管理。也许决定走DBaaS之路的客户可能会跳过解决方案提供商,尽管这个决策看起来有点短视。<pstyle="TEXT-INDENT:2em">优化是一项庞大的义务,由于它终极必要对全部体系的了解.当用你的体系/使用的小常识做一些部分优化是大概的时分,你越想让你的体系更优化,你必需晓得它也越多.因而,本章将试图注释并给出优化MySQL的分歧办法的一些例子.可是记着老是有某些(渐渐变难)是体系更快的办法留着往做.为了使一个体系更快的最主要部分固然是基础计划.你也必要晓得你的体系将做如许的事变,那就是你的瓶颈.最多见的瓶颈是:<pstyle="TEXT-INDENT:2em"><pstyle="TEXT-INDENT:2em">磁盘寻道.磁盘花工夫找到一个数据,用在1999年的古代磁盘其均匀工夫一般小于10ms,因而实际上我们能约莫一秒寻道1000次.这个工夫用新磁盘进步很慢而且很难对一个表优化.优化它的办法是将数据分布在多个磁盘上.当磁盘在我们必要读数据的准确地位时,磁盘读/写.用1999年的古代,一个磁盘传输相似10-20Mb/s.这必寻道更简单优化,由于你能从多个磁盘并行地读.CPU周期.当我们读数据进内存时,(或假如它已在那边)我们必要处置它以到达我们的了局.当我们有绝对内存较小的表时,这是最多见的限定要素,可是用小表速率一般不是成绩.内存带宽.当CPU必要超越合适cpu缓存的数据时,缓存带宽就成为内存的一个瓶颈.这是对年夜多半体系的一个不罕见的瓶颈可是你应当晓得它.10.2体系/编译时和启动参数的调治我们以体系级的器材入手下手,由于这些决议的某一些很早就做好了.在其他情形下,疾速扫瞄这部分大概就够了,由于它对年夜劳绩其实不主要,可是有一个关于在这个条理上劳绩有多年夜的感到老是好的.利用的缺省OS的确主要!为了最年夜水平地利用多CPU,应当利用Solaris(由于线程事情得的确不错)或Linux(由于2.2本的中心又的确不错的SMP撑持).并且在32位的呆板上,Linux缺省有2G的文件巨细限定.当新的文件体系被释出时(XFS),但愿这不久被修改.由于我们没在良多平台上运转临盆MySQL,我们忠言你在大概选择它前,测试你盘算运转的平台.<pstyle="TEXT-INDENT:2em"><pstyle="TEXT-INDENT:2em">其他倡议:<pstyle="TEXT-INDENT:2em"><pstyle="TEXT-INDENT:2em">假如你有充足的RAM,你能删除一切互换设备.一些操纵体系在某些情形下将利用一个SWAP设备,即便你有余暇的内存.利用--skip-locking的MySQL选项制止内部锁定.注重这将不影响MySQL功效,只需它仅运转在一个服务器上.只需在你运转myisamchk之前,记得要停失落服务器(或锁定相干部分).在一些体系上这个开关是强迫的,由于内部锁定不是在任何情形下都事情.当用MIT-pthreads编译时,--skip-locking选项缺省为翻开(on),由于flock()没在一切的平台上被MIT-pthreads充实撑持.独一的情形是假如你对统一数据运转MySQL服务器(不是客户),你不克不及利用--skip-locking之时,不然对没有先清失落(flushing)或先锁定mysqld服务器的表上运转myisamchk.你仍旧能利用LOCKTABLES/UNLOCKTABLES,即便你正在利用--skip-locking.<pstyle="TEXT-INDENT:2em"><pstyle="TEXT-INDENT:2em">编译和链接如何影响MySQL的速率<pstyle="TEXT-INDENT:2em">年夜多半以下测试在Linux上并用MySQL基准举行的,可是它们应当对其他操纵体系和事情负载给出一些唆使.当你用-static链接时,你失掉最快的可实行文件.利用Unix套接字而非TCP/IP毗连一个数据库也可给出好一些的功能.在Linux上,当用pgcc和-O6编译时,你将失掉最快的代码.为了用这些选项编译“sql_yacc.cc”,你必要约莫200M内存,由于gcc/pgcc必要良多内存使一切函数嵌进(inline).在设置MySQL时,你也应当设定CXX=gcc以免包含libstdc++库(它不必要).只经由过程利用一个较好的编译器或较好的编译器选项,在使用中你能失掉一个10-30%的减速.假如你本人编译SQL服务器,这出格主要!在Intel上,你应当比方利用pgcc或CygnusCodeFusion编译器失掉最年夜速率.我们已测试了新的Fujitsu编译器,可是它是还没充足不堕落来优化编译MySQL.

<pstyle="TEXT-INDENT:2em">这里是我们做过的一些丈量表:<pstyle="TEXT-INDENT:2em"><pstyle="TEXT-INDENT:2em">假如你以-O6利用pgcc而且编译任何器材,mysqld服务器是比用gcc快11%(用字符串99的版本).假如你静态地链接(没有-static),了局慢了13%.注重你仍能利用一个静态毗连的MySQL库.只要服务器对功能是关头的.假如你利用TCP/IP而非Unix套接字,了局慢7.5%.在一个SunSPARCstation10上,gcc2.7.3是比SunProC++4.2快13%.在Solaris2.5.1上,在单个处置器上MIT-pthreads比带原生线程的Solaris慢8-12%.以更多的负载/cpus,不同应当变得更年夜.由TcX供应的MySQL-Linux的分发用pgcc编译并静态链接.<pstyle="TEXT-INDENT:2em"><pstyle="TEXT-INDENT:2em">正如后面所述,磁盘寻道是一本性能的年夜瓶颈.当数据入手下手增加乃至缓存变得不成能时,这个成绩变得愈来愈分明.对年夜数据库,在那你或多或少地要随机存取数据,你能够依托你将最少必要一次磁盘寻道来读取而且几回磁盘寻道写进.为了使这个成绩最小化,利用有低寻道工夫的磁盘.为了增添可用磁盘轴的数目(而且从而削减寻道开支),标记连接文件到分歧磁盘或支解磁盘是大概的.利用标记毗连这意味着你将索引/数据文件标记从一般的数据目次链接到其他磁盘(那也能够被支解的).这使得寻道和读取工夫更好(假如磁盘不必于其他事变).见10.2.2.1利用数据库和表的标记链接.支解支解意味着你有很多磁盘并把第一块放在第一个磁盘上,在第二块放在第二个磁盘上,而且第n块在第(nmodnumber_of_disks)磁盘上,等等.这意味着,假如你的一般数据巨细于支解巨细(或完善地分列过),你将失掉较好一些的功能.注重,支解是不是很依附于OS和支解巨细.因而用分歧的支解巨细测试你的使用程序.见10.8利用你本人的基准.注重对支解的速率差别很依附于参数,取决于你怎样支解参数和磁盘数目,你能够得出以数目级的分歧.注重你必需选择为随机或按次存取优化.为了牢靠,你大概想要利用打击RAID0+1(支解+镜像),可是在这类情形下,你将必要2*N个驱动器来保留N个驱动器的数据.假如你有钱,这多是最好的选择!但是你也大概必需投资一些卷办理软件投资以高效地处置它.一个好选择是让稍主要的数据(它能再生)上存在RAID0磁盘上,而将的确主要的数据(像主机信息和日记文件)存在一个RAID0+1或RAIDN磁盘上.假如由于更别致偶位你有很多写进,RAIDN多是一个成绩.你也能够对数据库利用的文件体系设置参数.一个简单的改动是以noatime选项挂装文件体系.这是它跳过更新在inode中的最初会见工夫,并且这将制止一些磁盘寻道.<pstyle="TEXT-INDENT:2em"><pstyle="TEXT-INDENT:2em">你能够从数据库目次挪动表和数据库到别处,而且用链接到新地址的标记取代它们.你大概想要如许做,比方,转移一个数据库到有更多余暇空间的一个文件体系.假如MySQL注重到一个表是一个标记链接,它将剖析标记链接而且利用实在际指向的表,它可事情在撑持realpath()挪用的一切体系上(最少Linux和Solaris撑持realpath())!在不撑持realpath()的体系上,你应当分歧时经由过程实在路径和标记链接会见表!假如你如许做,表在任何更新后将纷歧致.MySQL缺省不撑持数据库链接.只需你不在数据库之间做一个标记链接,统统将事情一般.假定你在MySQL数据目次下有一个数据库db1,而且做了一个标记链接db2指向db1:<pstyle="TEXT-INDENT:2em"><pstyle="TEXT-INDENT:2em">shell&>cd/path/to/datadir<pstyle="TEXT-INDENT:2em">shell&>ln-sdb1db2<pstyle="TEXT-INDENT:2em">如今,对在db1中的任一表tbl_a,在db2种也好象有一个表tbl_a.假如一个线程更新db1.tbl_a而且另外一个线程更新db2.tbl_a,将有成绩.假如你的确必要如许,你必需改动以下在“mysys/mf_format.c”中的代码:<pstyle="TEXT-INDENT:2em"><pstyle="TEXT-INDENT:2em">if(!lstat(to,&stat_buff))/*Checkifitsasymboliclink*/<pstyle="TEXT-INDENT:2em">if(S_ISLNK(stat_buff.st_mode)&&realpath(to,buff))<pstyle="TEXT-INDENT:2em"><pstyle="TEXT-INDENT:2em">把代码改动为如许:<pstyle="TEXT-INDENT:2em">if(realpath(to,buff))
任何规模的组织都可能受益于外包服务,并在一个标准化和优化的平台上统一其数据库管理任务。基于其本身的特性,DBaaS提供了敏捷和高效的数据库服务,它可以支持多变的需求。

金色的骷髅 发表于 2015-1-19 11:01:18

如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。

莫相离 发表于 2015-1-28 06:19:33

不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?

冷月葬花魂 发表于 2015-2-5 19:24:40

Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。

山那边是海 发表于 2015-2-13 07:43:43

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

小女巫 发表于 2015-3-3 19:19:22

一个是把SQL语句写到客户端,可以使用DataSet进行加工;

愤怒的大鸟 发表于 2015-3-11 12:57:32

多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。

admin 发表于 2015-3-26 15:20:36

需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
页: [1]
查看完整版本: MYSQL网页编程之从MySQL失掉最年夜的优化功能