仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 864|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网页设计MySQL使用技能以内存利用线程独享

[复制链接]
若相依 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
不管怎么样,市场的结果已经证明MySQL具有性价比高、灵活、MySQL学习教程广为使用和具有良好支持的特点。  在这里我们将先容的是MySQL内存利用上的线程独享,线程独享内存次要用于各客户端毗连线程存储各类操纵的独享数据,如线程栈信息,分组排序操纵,数据读写缓冲,了局集暂存等等,并且年夜多半能够经由过程相干参数来把持内存的利用量。
  关于任何一个数据库办理体系来讲,内存的分派利用相对能够算的上是其中心之一了,以是良多但愿更加深切懂得某数据库办理体系的人,城市但愿一窥事实,我也不破例。
  从内存的利用体例MySQL数据库的内存利用次要分为以下两类
  线程独享内存
  全局共享内存
  明天这篇文章临时先剖析MySQL中次要的“线程独享内存”的。
  在MySQL中,线程独享内存次要用于各客户端毗连线程存储各类操纵的独享数据,如线程栈信息,分组排序操纵,数据读写缓冲,了局集暂存等等,并且年夜多半能够经由过程相干参数来把持内存的利用量。
  线程栈信息利用内存(thread_stack):次要用来寄存每个线程本身的标识信息,如线程id,线程运转时基础信息等等,我们能够经由过程thread_stack参数来设置为每个线程栈分派多年夜的内存。
  排序利用内存(sort_buffer_size):MySQL用此内存地区举行排序操纵(filesort),完成客户真个排序哀求。当我们设置的排序区缓存巨细没法满意排序实践所需内存的时分,MySQL会将数据写进磁盘文件来完成排序。因为磁盘和内存的读写功能完整不在一个数目级,以是sort_buffer_size参数对排序操纵的功能影响相对不成藐视。排序操纵的完成道理请参考:MySQLOrderBy的完成剖析。
  Join操纵利用内存(join_buffer_size):使用程序常常会呈现一些两表(或多表)Join的操纵需求,MySQL在完成某些Join需求的时分(all/indexjoin),为了削减介入Join的“被驱动表”的读取次数以进步功能,必要利用到JoinBuffer来帮忙完成Join操纵(详细Join完成算法请参考:MySQL中的Join基础完成道理)。当JoinBuffer太小,MySQL不会将该Buffer存进磁盘文件,而是先将JoinBuffer中的了局集与必要Join的表举行Join操纵,然后清空JoinBuffer中的数据,持续将残剩的了局集写进此Buffer中,云云来去。这必将会形成被驱动表必要被屡次读取,成倍增添IO会见,下降效力。
  按次读取数据缓冲区利用内存(read_buffer_size):这部份内存次要用于当必要按次读取数据的时分,如无发利用索引的情形下的全表扫描,全索引扫描等。在这类时分,MySQL依照数据的存储按次顺次读取数据块,每次读取的数据快起首会暂存在read_buffer_size中,当buffer空间被写满大概全体数据读取停止后,再将buffer中的数据前往给下层挪用者,以进步效力。
  随机读取数据缓冲区利用内存(read_rnd_buffer_size):温柔序读取绝对应,当MySQL举行非按次读取(随机读取)数据块的时分,会使用这个缓冲区暂存读取的数据。如依据索引信息读取表数据,依据排序后的了局集与表举行Join等等。总的来讲,就是当数据块的读取必要满意必定的按次的情形下,MySQL就必要发生随机读取,进而利用到read_rnd_buffer_size参数所设置的内存缓冲区。
  毗连信息及前往客户端前了局集暂存利用内存(net_buffer_size):这部分用来寄存客户端毗连线程的毗连信息和前往客户真个了局集。当MySQL入手下手发生能够前往的了局集,会在经由过程收集前往给客户端哀求线程之前,会先暂存在经由过程net_buffer_size所设置的缓冲区中,等满意必定巨细的时分才入手下手向客户端发送,以进步收集传输效力。不外,net_buffer_size参数所设置的仅仅只是该缓存区的初始化巨细,MySQL会依据实践必要自行请求更多的内存以满意需求,但最年夜不会凌驾max_allowed_packet参数巨细。
  批量拔出暂存利用内存(bulk_insert_buffer_size):当我们利用如insert…values(…),(…),(…)…的体例举行批量拔出的时分,MySQL会先将提交的数据放如一个缓存空间中,当该缓存空间被写满大概提交完一切数据以后,MySQL才会一次性将该缓存空间中的数据写进数据库并清空缓存。别的,当我们举行LOADDATAINFILE操纵来将文本文件中的数据Load进数据库的时分,一样会利用到此缓冲区。
  一时表利用内存(tmp_table_size):当我们举行一些特别操纵如必要利用一时表才干完成的OrderBy,GroupBy等等,MySQL大概必要利用光临时表。当我们的一时表较小(小于tmp_table_size参数所设置的巨细)的时分,MySQL会将一时表创立成内存一时表,只要当tmp_table_size所设置的巨细没法装下全部一时表的时分,MySQL才会将该表创立成MyISAM存储引擎的表寄存在磁盘上。不外,当另外一个体系参数max_heap_table_size的巨细还小于tmp_table_size的时分,MySQL将利用max_heap_table_size参数所设置巨细作为最年夜的内存一时表巨细,而疏忽tmp_table_size所设置的值。并且tmp_table_size参数从MySQL5.1.2才入手下手有,之前一向利用max_heap_table_size。
  下面所枚举的MySQL线程独享内存仅仅只是一切线程独享内存中的部分,并非全体,选择的准绳是大概对MySQL的功能发生较年夜的影响,且能够经由过程体系参数举行调治。
  因为以上内存都是线程独享,极度情形下的内存整体利用量将是一切毗连线程的总倍数。以是列位伴侣在设置过程当中必定要审慎,切不成为了提拔功能就自觉的增年夜各参数值,制止由于内存不敷而发生OutOfMemory非常大概是严峻的Swap互换反而下降全体功能
<Pstyle="TEXT-INDENT:2em">
甚至一个有经验的Windows管理者也可以轻松部署并开始学习它,而你不需投入一分钱来了解这个数据库。
分手快乐 该用户已被删除
沙发
发表于 2015-1-19 05:59:44 | 只看该作者
同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。
莫相离 该用户已被删除
板凳
发表于 2015-1-25 18:11:47 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
admin 该用户已被删除
地板
发表于 2015-2-3 12:45:55 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
5#
发表于 2015-2-9 01:47:15 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
愤怒的大鸟 该用户已被删除
6#
发表于 2015-2-26 17:49:13 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
若相依 该用户已被删除
7#
 楼主| 发表于 2015-3-8 16:27:44 | 只看该作者
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
海妖 该用户已被删除
8#
发表于 2015-3-16 05:25:57 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
乐观 该用户已被删除
9#
发表于 2015-3-22 20:22:13 | 只看该作者
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 03:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表