MSSQL网站制作之InnoDB 中文参考手册 --- 2 InnoDB 启动...
目前的方案是用mysqlbinlog工具,增加一个flashback参数,输出结果为一个新的binlog文件――姑且叫做flashbacklog,这个flashbacklog顺序执行,可制定某张表和执行到哪个pos,来实现数据库的闪回。参考|参考手册|中文InnoDB中文参考手册---犬犬(心帆)翻译2InnoDB启动选项为了在MySQL-Max-3.23中利用InnoDB表,你必需在设置文件‘my.cnf’或‘my.ini’(WINDOWS体系)中的区中具体指定设置参数。
作为最小设置,在3.23中你必需在innodb_data_file_path上指定命据文件名能及巨细。假如在‘my.cnf’中没有指定innodb_data_home_dir,体系将在MySQL的datadir目次下创立数据文件。假如将innodb_data_home_dir设为一个空串,那能够在innodb_data_file_path中给定一个相对路径。在MySQL-4.0中能够不设定innodb_data_file_path:MySQL-4.0将默许地在datadir目次下创建一个10MB巨细自扩大(auto-extending)的文件‘ibdata1’(在MySQL-4.0.0与4.0.1中数据文件的巨细为64MB而且长短自扩大的(notauto-extending))。
为了失掉更好的功能你必需所示的例子明白地设定InnoDB启动参数。
从3.23.50版和4.0.2版入手下手,InnoDB同意在innodb_data_file_path中设置的最一个数据文件形貌为auto-extending。innodb_data_file_path语法以下所示:
pathtodatafile:sizespecification;pathtodatafile:sizespec;......;pathtodatafile:sizespec[:autoextend[:max:sizespecification]]
假如用autoextend选项形貌最初一个数据文件,当InnoDB用尽一切表自在空间后将会主动扩大最初一个数据文件,每次增量为8MB。示例:
innodb_data_home_dir=innodb_data_file_path=/ibdata/ibdata1:100M:autoextend
指定InnoDB只创建一个最后巨细为100MB而且当表空间被用尽时以8MB每块增添的数据文件。假如硬盘空间不敷,能够再增加一个数据文件并将其放在别的的硬盘中。举例来讲:先反省硬盘空间的巨细,设定ibdata1文件使它靠近于硬盘空余空间巨细并为1024*1024bytes(=1MB)的倍数,将ibdata1明白地指定在innodb_data_file_path中。在此以后能够增加另外一个数据文件:
innodb_data_home_dir=innodb_data_file_path=/ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend
注重:设定文件巨细时必定要注重你的OS是不是有最年夜文件尺寸为2GB的限定!InnoDB是不会注重你的OS文件尺寸限定的,在一些文件体系中你大概要设定最年夜容量限定:
innodb_data_home_dir=innodb_data_file_path=/ibdata/ibdata1:100M:autoextend:max:2000M
一个复杂的my.cnf例子。假定你的盘算机有128MBRAM和一个硬盘。上面的例子是为了利用InnoDB而在my.cnf或my.ini文件中大概所作的一些设置。我们假定你运转的是MySQL-Max-3.23.50及以上版本,或MySQL-4.0.2及以上版本。
这个示例合适年夜部分不必要将InnoDB数据文件和日记文件放在几个盘上的Unix和Windows用户。这个例子在MySQL的datadir目次(典范的为/mysql/data)中创立一个自扩大(auto-extending)的数据文件ibdata1和两个InnoDB运转日记文件ib_logfile0和ib_logfile1和ib_arch_log_0000000000档案文件。
#在这里到场别的的MySQL服务器设置#...#数据文件必需#可以容下数据与索引#断定有充足的#磁盘空间innodb_data_file_path=ibdata1:10M:autoextend#设置缓冲池的巨细为#你的主内存巨细的#50-80%set-variable=innodb_buffer_pool_size=70Mset-variable=innodb_additional_mem_pool_size=10M#设置日记文件的巨细约为#缓冲池(bufferpool)#巨细的25%set-variable=innodb_log_file_size=20Mset-variable=innodb_log_buffer_size=8M#假如丧失比来几个事件影响#不年夜的话能够设置#.._flush_log_at_trx_commit=0innodb_flush_log_at_trx_commit=1
InnoDB不会本人创建目次,必需本人利用操纵体系命令创建响应的目次。反省你的MySQL服务程序在datadir目次里有充足的权限创建文件。
注重:在某些文件体系中数据文件巨细必需小于2G!一切运转日记文件的巨细总和必需小于2G或4G,这依附于详细的MySQL体系版本。数据文件的总和必需年夜于即是10MB.
当第一次创建InnoDB数据库时,倡议最好以命令行体例启动MySQL服务。如许InnoDB数据库创建时的提醒信息将在屏幕上显现,从而能够看到创建历程。上面第3节所示就是InnoDB数据库创建时的屏幕显现。比方,在Windows下利用以下指令启动mysqld-max.exe:
your-path-to-mysqld>mysqld-max--console
在Windows体系下my.cnf或my.ini放在那里?划定规矩以下:只能存在一个my.cnf或my.ini文件my.cnf文件必需放在C:的根目次下my.ini文件必需放在WINDIR目次下,例:C:WINDOWS或C:WINNT。可使用MS-DOS的SET命令检察WINDIR目次值假如你的PC利用启动引诱程序引诱体系而C:不是启动磁盘,那只能独一地利用my.ini作为设置文件
Unix下在那里指定设置文件?在Unix下mysqld按以下按次搜刮设置文件:/etc/my.cnf全局选项COMPILATION_DATADIR/my.cnf服务器局限的选项defaults-extra-file接纳--defaults-extra-file=....设置的默许文件~/.my.cnf用户指定文件COMPILATION_DATADIR是MySQL的数据文件目次,它是在mysqld被编译时以./configure设置指定(典范的是/usr/local/mysql/data二进制安装或/usr/local/var以源安装)。
假如不有断定mysqld从那里读取my.cnf或my.ini,能够在第一命令行上具体指定它的目次:mysqld--defaults-file=your_path_to_my_cnf。
InnoDB的数据文件目次是对innodb_data_home_dir与innodb_data_file_path的数据文件名或目次团结,假如必要将在它们之间增添一个“/”或“”。假如关头字innodb_data_home_dir没有在my.cnf中明白指定,它的默许值为“.”,即目次“./”,这意味着MySQL的datadirofMySQL.
一个初级的my.cnf示例。假定你有一台2GBRAM和3个60GB硬盘(路径分离为"/","/dr2"和“/dr3”)装有Linux。上面的例子是为了利用InnoDB而在my.cnf文件中大概所作的一些设置。
注重:InnoDB不会本人创立文件目次:你必需本人创立它们。利用Unix或MS-DOSmkdir命令创建响应的数据与日记文件目次。
#在这里到场别的的MySQL服务器设置#...#假如不利用InnoDB表将一列一行正文往除#skip-innodb##数据文件必需#可以容下数据与索引#断定有充足的#磁盘空间innodb_data_file_path=/ibdata/ibdata1:2000M;/dr2/ibdata/ibdata2:2000M:autoextend#设置缓冲池的巨细为#你的主内存巨细的#50-80%,可是#在Linuxx86总内存#利用必需小于2GBset-variable=innodb_buffer_pool_size=1Gset-variable=innodb_additional_mem_pool_size=20Minnodb_log_group_home_dir=/dr3/iblogs#.._log_arch_dir必需和#.._log_group_home_dir一样;#从4.0.6入手下手,能够省略它innodb_log_arch_dir=/dr3/iblogsset-variable=innodb_log_files_in_group=3#设置日记文件的巨细约为#缓冲池(bufferpool)#巨细的15%set-variable=innodb_log_file_size=150Mset-variable=innodb_log_buffer_size=8M#假如丧失比来几个事件影响#不年夜的话能够设置#.._flush_log_at_trx_commit=0innodb_flush_log_at_trx_commit=1set-variable=innodb_lock_wait_timeout=50#innodb_flush_method=fdatasync#set-variable=innodb_thread_concurrency=5
注重:我们已在分歧的硬盘上安排了两个数据文件,InnoDB将从数据文件的底部添补表空间。在某些情形下一切的数据被分派到分歧的物理硬盘中会进步数据库的功能。将日记文件与数据文件分离放在分歧的物理硬盘中对进步功能一般是很无益的。你一样可使用一个RAW磁盘分区(rawdiskpartitions(rawdevices))作为数据文件,在一些Unixe体系中这将进步I/O才能。怎样在my.cnf中具体指定它们请检察第12.1节。
告诫:在Linuxx86上必需当心不克不及将内存利用设置太高,glibc会把历程堆增加到线程仓库之上,这将会使服务器溃散。上面的靠近或凌驾于2G将会很伤害:
innodb_buffer_pool_size+key_buffer+max_connections*(sort_buffer+record_buffer)+max_connections*2MB
每一个线程将利用2MB(MySQLAB二进制版本为256KB)的仓库,在最坏的情况下还会利用sort_buffer+record_buffer的附加内存。
怎样调剂别的的mysqld服务器参数?检察MySQL用户手册能够失掉更具体的信息。合适年夜多半用户的典范参数以下所示:
skip-lockingset-variable=max_connections=200set-variable=record_buffer=1Mset-variable=sort_buffer=1M#设置索引缓冲(key_buffer)巨细为#你的RAM的5-50%,这次要依附于#体系中MyISAM表利用量。#可是必需包管索引缓冲(key_buffer)与InnoDB#的缓冲池(bufferpool)巨细总和#小于RAM的80%。set-variable=key_buffer=...
注重:在my.cnf文件中有些参数是为了设置数字的,它们的设置格局为:set-variable=innodb...=123,而别的(字符串和逻辑型)的接纳另外一设置格局:innodb_...=....
各设置参数的寄义以下:
innodb_data_home_dir
这是InnoDB表的目次共用设置。假如没有在my.cnf举行设置,InnoDB将利用MySQL的datadir目次为缺省目次。假如设定一个空字串,能够在innodb_data_file_path中设定相对路径。
innodb_data_file_path独自指定命据文件的路径与巨细。数据文件的完全路径由innodb_data_home_dir与这里所设定值的组合。文件巨细以MB单元指定。因而在文件巨细指定后必有“M”。InnoDB也撑持缩写“G”,1G=1024M。从3.23.44入手下手,在那些撑持年夜文件的操纵体系上能够设置数据文件巨细年夜于4GB。而在另外一些操纵体系上数据文件必需小于2GB。数据文件巨细总和最少要到达10MB。在MySQL-3.23中这个参数必需在my.cnf中明白指定。在MySQL-4.0.2和更新版本中则不需云云,体系会默许在MySQL的datadir目次下创立一个16MB自扩大(auto-extending)的数据文件ibdata1。你一样可使用一个原生磁盘分区(RAWrawdiskpartitions(rawdevices))作为数据文件,怎样在my.cnf中具体指定它们请检察第12.1节。innodb_mirrored_log_groups为了回护数据而设置的日记文件组的拷贝数量,默许设置为1。在my.cnf中以数字格局设置。innodb_log_group_home_dirInnoDB日记文件的路径。必需与innodb_log_arch_dir设置不异值。假如没有明白指定将默许在MySQL的datadir目次下创建两个5MB巨细的ib_logfile...文件。innodb_log_files_in_group日记组中的日记文件数量。InnoDB以环型体例(circularfashion)写进文件。数值3被保举利用。在my.cnf中以数字格局设置。innodb_log_file_size日记组中的每一个日记文件的巨细(单元MB)。假如n是日记组中日记文件的数量,那末幻想的数值为1M至上面设置的缓冲池(bufferpool)巨细的1/n。较年夜的值,能够削减革新缓冲池的次数,从而削减磁盘I/O。可是年夜的日记文件意味着在溃散时必要更长的工夫来恢单数据。日记文件总和必需小于2GB,3.23.55和4.0.9以上为小于4GB。在my.cnf中以数字格局设置。innodb_log_buffer_sizeInnoDB将日记写进日记磁盘文件前的缓冲巨细。幻想值为1M至8M。年夜的日记缓冲同意事件运转时不必要将日记保留进磁盘而只到事件被提交(commit)。因而,假如有年夜的事件处置,设置年夜的日记缓冲能够削减磁盘I/O。在my.cnf中以数字格局设置。innodb_flush_log_at_trx_commit一般设置为1,意味着在事件提交前日记已被写进磁盘,事件能够运转更长和服务溃散后的修复才能。假如你乐意削弱这个平安,或你运转的是对照小的事件处置,能够将它设置为0,以削减写日记文件的磁盘I/O。这个选项默许设置为0。innodb_log_arch_dirThedirectorywherefullywrittenlogfileswouldbearchivedifweusedlogarchiving.这里设置的参数必需与innodb_log_group_home_dir不异。从4.0.6入手下手,能够疏忽这个参数。innodb_log_archive这个值一般设为0。既然从备份中恢复(recovery)合适于MySQL利用它本人的logfiles,因此一般不再必要archiveInnoDBlogfiles。这个选项默许设置为0。innodb_buffer_pool_sizeInnoDB用来高速缓冲数据和索引内存缓冲巨细。更年夜的设置可使会见数据时削减磁盘I/O。在一个公用的数据库服务器上能够将它设置为物理内存的80%。不要将它设置太年夜,由于物理内存的利用合作大概会影响操纵体系的页面挪用。在my.cnf中以数字格局设置。innodb_additional_mem_pool_sizeInnoDB用来存储数据字典(datadictionary)信息和别的外部数据布局(internaldatastructures)的存储器组合(memorypool)巨细。幻想的值为2M,假如有更多的表你就必要在这里从头分派。假如InnoDB用尽这个池中的一切内存,它将从操纵体系平分配内存,并将毛病信息写进MySQL的毛病日记中。在my.cnf中以数字格局设置。innodb_file_io_threadsInnoDB中的文件I/O线程。一般设置为4,可是在Windows下能够设定一个更年夜的值以进步磁盘I/O。在my.cnf中以数字格局设置。innodb_lock_wait_timeout在回滚(rooledback)之前,InnoDB事件将守候超时的工夫(单元秒)。InnoDB会主动反省本身在锁定表与事件回滚时的事件逝世锁。假如利用LOCKTABLES命令,或在统一个事件中利用别的事件平安型表处置器(transactionsafetablehandlersthanInnoDB),那末大概会产生一个InnoDB没法注重到的逝世锁。在这类情形下超时将用来办理这个成绩。这个参数的默许值为50秒。在my.cnf中以数字格局设置。innodb_flush_method这个参数仅仅与Unix相干。这个参数默许值为fdatasync。另外一个设置项为O_DSYNC。这仅仅影响日记文件的转储,在Unix下以fsync转储数据。InnoDB版本从3.23.40b入手下手,在Unix下指定fdatasync为利用fsync体例、指定O_DSYNC为利用O_SYNC体例。因为这在某些Unix情况下另有些成绩以是在dataversions并没有被利用。innodb_force_recovery告诫:此参数只能在你但愿从一个被破坏的数据库直达储(dump)数据的告急情形下利用!大概设置的值局限为1-6。检察上面的章节Forcingrecovery以懂得这个参数的详细寄义。参数设置年夜于0的值代表着InnoDB避免用户修正数据的平安度。从3.23.44入手下手,这个参数可用。在my.cnf中以数字格局设置。innodb_fast_shutdownInnoDB短少在封闭之前清空拔出缓冲。这个操纵大概必要几分钟,在极度的情形下能够必要几个小时。假如这个参数据设置为1,InnoDB将跳过这个历程而间接封闭。从3.23.44和4.0.1入手下手,此参数可用。从3.23.50入手下手,此参数的默许值为1。innodb_thread_concurrencyInnoDB会试图将InnoDB服务的利用的操纵体系历程小于或即是这里所设定的数值。此参数默许值为8。假如盘算机体系功能较低或innodb_monitor显现有良多线程等侍旌旗灯号,应当将这个值设小一点。假如你的盘算机体系有很我的处置器与磁盘体系,则能够将这个值设高一点以充实使用你的体系资本。倡议设值为处置器数量+磁盘数量。从3.23.44和4.0.1入手下手,此参数可用。在my.cnf中以数字格局设置。InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定 个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。 也可谈一下你是怎么优化存储过程的? 原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。 这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片? SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。 XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!) 一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
页:
[1]