101MySQL优化技巧和技巧
1,我们有足够的物理内存来加载整个InnoDB文件到内存。在内存中访问文件比在硬盘中访问要快。
2。不惜任何代价避免使用交换交换分区——它在切换时从硬盘读取,而且速度非常慢。
三.使用电池供电的RAM(注:RAM或随机存储器)。
4。采用先进的RAID(注:廉价磁盘冗余阵列,是磁盘阵列)-优选RAID10或更高。
5、避免RAID5(注:一种存储解决方案,以存储性能、数据安全和存储成本帐户)以确保数据库的完整性验证的代价。
6。将操作系统与数据分区分开,不仅在逻辑上,而且在物理上——操作系统的读写将影响数据库的性能。
7、将MySQL临时空间和复制日志和数据放在不同的分区中。当数据库从磁盘读写时,会影响数据库的性能。
8。更多磁盘空间等于更快的速度。
9。更好更快的磁盘。
10。使用SAS(注:串行连接的SCSI,即串行连接SCSI)而不是SATA(注:SATA,即串行硬盘)。
11。较小的硬盘比大型硬盘更快,尤其是在RAID配置的情况下。
12。使用电池支持的高速缓存RAID控制器。
13。避免使用软件磁盘阵列。
14。考虑使用固态IO卡(而不是磁盘驱动器)进行数据分区——这些卡可以支持几乎所有数据的2GB/s写操作。
15。在Linux环境swappiness值0没有理由在数据库服务器上的文件缓存,这是一个服务器或台式机的优势。
16。如果可以的话,使用noatime和nodirtime挂载文件系统没有理由更新时间修改数据库文件。
17、使用XFS文件系统,文件系统,速度更快,比ext3,有许多日志选项,和ext3已经被证明与MySQL有双缓冲的问题。
18。调整为最高性能标准的XFS文件系统日志和缓存变量。
19,在Linux系统中,空或截止IO调度器使用时机。有空和期限相比调度器,CFQ调度和预期时间很慢。
20。使用64位操作系统——对于MySQL,将有更大的内存支持和使用。
21。删除服务器上的资源占用少的未使用的安装包和守护进程。
22。把主机MySQL和MySQL主机放在一个主机文件中-没有DNS查找。
23。不要强制杀死MySQL进程,否则会损坏数据库和正在运行备份的程序。
24。服务器对MySQL后台进程和其他服务的贡献可以缩短数据库占用CPU的时间。
MySQL的配置:
25。写作时,使用innodb_flush_method = o_direct避免双缓冲。
26。避免使用o_direct和ext3文件系统会将所有你想写的。
27。分配足够的innodb_buffer_pool_size加载整个InnoDB文件到内存少从磁盘中读取。
28、不设置innodb_log_file_size参数太大,这样你可以有更多的磁盘空间,速度更快,有更多的磁盘日志。通常,丢失更多的日志是好的。数据库崩溃后,可以减少恢复数据库的时间。
29。不要把innodb_thread_concurrency和thread_concurrency参数-这2个值是不相容的。
30。将少量的max_connections参数太多连接会耗尽内存和锁的mysql服务。
31。保持在一个相对高一些的相对高一些的thread_cache,约16 -慢防止打开连接。
32。使用跳过名称解析参数-删除DNS查找。
33。如果您的查询重复且数据不经常更改,则可以使用查询缓存。但是如果您的数据经常发生变化,使用查询缓存会让您失望。
34。增加temp_table_size值防止写入磁盘
35。增加max_heap_table_size值防止写入磁盘
36。不设置sort_buffer_size值太高,否则你的记忆将很快耗尽。
37、根据key_read_requests和key_reads价值决定的key_buffer大小。总的来说,key_read_requests应高于key_reads价值,否则你不能使用key_buffer有效。
38、设置innodb_flush_log_at_trx_commit 0会提高性能,但如果你想保持默认值(1),那么你就要确保数据的完整性,同时你也要确保复制不会落后。
39。你必须有一个测试环境来测试你的配置,你可以经常重启而不影响正常的生产。
MySQL模式优化:
40。保持数据库整理。
41。旧数据归档-删除冗余行或搜索查询。
42。将数据添加到索引中。
43。不要过度使用索引,比较和查询。
44。压缩文本和数据类型-节省空间和减少磁盘读取次数。
45。UTF 8和UTF16低于latin1的执行效率。
46。以温和的方式使用人字拖。
47。冗余数据保持在最低限度-不重复不必要的数据。
48。使用链接表,而不是扩展行。
49。注意数据类型,在实际数据中尽可能地使用最小的数据类型。
50。如果其他数据经常被用于查询,而非文本/文本数据不是,那么它就可以从其他数据中分离点/文本数据。
51。检查并定期优化表格。
52。经常改写InnoDB表优化。
53。有时,当添加列时,索引会被删除,然后再添加到索引中,这样速度会更快。
54。不同的存储引擎用于不同的需求。
55。使用存档的存储引擎日志表或审计表-这是更有效地编写。
56、会话数据存储在缓存(memcache)而不是MySQL。缓存允许自动和自动填充值,并防止创建难以读取和写入MySQL的时空数据。
57、使用varchar代替焦炭,节省空间,节省可变长度的字符串,因为固定长度的CHAR和VARCHAR长度不固定(UTF8不受此影响)。
58。逐步改变格局-一个小的变化,可以产生巨大的影响。
59。测试开发环境中的所有模式并反映生产的变化。
60。不要随意更改配置文件中的值,这会造成灾难性的影响。
61。有时,也少了很多配置MySQL。
62。有疑问时使用普通的MySQL配置文件。
查询优化:
63。使用慢速查询日志查找慢查询。
64。使用执行计划来确定查询是否正常运行。
65。总是测试你的查询,看看它们是否处于最佳状态,性能会随着时间而改变。
66。避免在整个表上使用计数(*),这可能会锁定整个表。
67。使查询保持一致,这样后续的类似查询就可以使用查询缓存。
68。在适当的情况下使用组而不是显式。
69。在WHERE、BY和BY子句中使用索引列。
70。保持索引简单,在多个索引中不包含相同的列。
71。有时MySQL使用错误的索引,并且使用索引来处理这种情况。
72。检查使用sql_mode =严格的问题。
73。对于记录数小于5的索引字段,在联合使用限制不是A或。
74。为了避免在重复密钥上使用插入或在预更新选择中忽略插入,不要使用更新来实现它。
75。不要使用max,使用索引字段和BY子句。
76。避免使用兰德()命令。
77。在某些情况下,限制m、n实际上可以减慢查询速度,并在适当的时候使用它。
78。使用联盟而不是在WHERE子句中的子查询。
79。对于更新(更新),使用共享模式(共享模式)以防止独占锁。
80。在MySQL的重启中,记得要温暖你的数据库,以确保你的数据在内存和查询中是快速的。
81。使用下拉表,创建表删除来删除表中的所有数据。
82。最小化的数据是查询您需要的数据,并花费大量的时间使用*。
83。考虑持久连接,而不是多个连接来减少开销。
84。基准查询,包括使用服务器上的负载,有时甚至是简单的查询也会影响其他查询。
85。当载荷添加到您的服务器,使用SHOW PROCESSLIST查看缓慢和有问题的查询。
86。在开发环境中生成的镜像数据中测试所有可疑查询。
MySQL备份过程:
87。从两级复制服务器备份。
88。在备份期间停止复制,以避免数据依赖和外键约束不一致。
89。完全停止MySQL和数据库文件的备份。
90。如果使用MySQL转储进行备份,请同时备份二进制日志文件,确保副本不会被中断。
91。不信任LVM快照--这很可能产生不一致的数据,将在未来给你带来的麻烦。
92。为了更容易地执行单表恢复,如果表中的数据与其他表隔离,则将数据导出到表中。
93。使用mysqldump时,请选择。
94。备份前检查和优化表。
95。为了使导入更快,外键约束在导入时暂时禁用。
96。为了更快导入,唯一性检测在导入时暂时禁用。
97。在每次备份之后计算数据库、表和索引的大小,以便监视数据大小的增长。
98。复制实例的错误和延迟由自动调度脚本监视。
99。定期进行备份。
100。定期测试备份。
最后的101。执行MySQL监视