游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

MySQL优化系列14优化MySQL内存

  备注:测试数据库版本为MySQL8。0TableofContents一。MySQL如何使用内存二。监控MySQL内存使用三。开始largepage支持参考:一。MySQL如何使用内存
  MySQL分配缓冲区和缓存来提高数据库操作的性能。默认配置被设计为允许MySQL服务器在拥有大约512MB内存的虚拟机上启动。您可以通过增加某些缓存和缓冲区相关的系统变量的值来提高MySQL的性能。您还可以修改默认配置,以便在内存有限的系统上运行MySQL。
  下面的列表描述了MySQL使用内存的一些方式。在适用的情况下,引用了相关的系统变量。有些项目是特定于存储引擎或特性的。InnoDB缓冲池是存放表、索引和其他辅助缓冲的InnoDB数据的内存区域。为了提高大容量读操作的效率,缓冲池被划分为可能包含多行的页。为了提高缓存管理的效率,缓冲池被实现为页面的链表;使用LRU算法的一种变体,将很少使用的数据从缓存中老化。
  缓冲池的大小对系统性能很重要:
  1。1)InnoDB在服务器启动时使用malloc()操作为整个缓冲池分配内存。系统变量innodbbufferpoolsize定义了缓冲池的大小。通常,建议innodbbufferpoolsize值为系统内存的50到75。Innodbbufferpoolsize可以在服务器运行时动态配置。
  1。2)在具有大量内存的系统上,可以通过将缓冲池划分为多个缓冲池实例来提高并发性。系统变量innodbbufferpoolinstances定义了缓冲池实例的数量。
  1。3)太小的缓冲池可能会导致过多的搅动,因为从缓冲池中刷新的页面不久之后才需要再次使用。
  1。4)太大的缓冲池可能会由于内存竞争而导致交换。存储引擎接口使优化器能够提供有关用于扫描的记录缓冲区大小的信息,优化器估计这些扫描可能会读取多行。缓冲区大小可以根据估计的大小而变化。InnoDB使用这种可变大小的缓冲能力来利用行预取,并减少锁存和b树导航的开销。所有线程共享MyISAM键缓冲区。keybuffersize系统变量决定了它的大小。对于服务器打开的每个MyISAM表,索引文件打开一次;对于每个并发运行的访问表的线程,都打开数据文件一次。对于每个并发线程,都分配了一个表结构、每个列的列结构和一个大小为3N的缓冲区(其中N是最大的行长度,不包括BLOB列)。一个BLOB列需要5到8个字节加上BLOB数据的长度。MyISAM存储引擎维护一个额外的行缓冲区供内部使用。可以将myisamusemmap系统变量设置为1,以便为所有MyISAM表启用内存映射。如果内存中的临时表变得太大(使用tmptablesize和maxheaptablesize系统变量确定),MySQL会自动将表从内存中的格式转换为磁盘上的格式。从MySQL8。0。16开始,磁盘上的临时表总是使用InnoDB存储引擎。(以前,用于此目的的存储引擎由系统变量internaltmpdiskstorageengine决定,现在不再支持该变量。)你可以增加允许的临时表的大小。对于使用CREATETABLE显式创建的MEMORY表,只有maxheaptablesize系统变量决定表可以增长多少,并且没有转换到磁盘上的格式。MySQL性能模式是一个用于在低级别监控MySQL服务器执行的特性。PerformanceSchema动态地增量地分配内存,根据实际的服务器负载扩展其内存使用,而不是在服务器启动期间分配所需的内存。一旦分配了内存,就不会释放它,直到服务器重新启动。服务器用于管理客户机连接的每个线程都需要一些特定于线程的空间。下面的列表表明了这些和哪些系统变量控制它们的大小:
  9。1)一个堆栈(threadstack)
  9。2)连接缓冲区(netbufferlength)
  9。3)结果缓冲区(netbufferlength)
  连接缓冲区和结果缓冲区的大小都以netbufferlength字节开始,但会根据需要动态扩大到maxallowedpacket字节。在每个SQL语句之后,结果缓冲区缩小到netbufferlength字节。当语句运行时,还会分配当前语句字符串的副本。
  每个连接线程使用内存计算语句摘要。服务器为每个会话分配maxdigestlength字节。所有线程共享相同的基本内存。当不再需要一个线程时,分配给它的内存将被释放并返回给系统,除非该线程返回到线程缓存中。在这种情况下,内存仍然被分配。每个执行表的顺序扫描的请求都分配一个读缓冲区。readbuffersize系统变量决定缓冲区大小。当以任意顺序读取行(例如,按照排序)时,可能会分配一个随机读取缓冲区以避免磁盘查找。readrndbuffersize系统变量决定缓冲区大小。所有连接都是在一次传递中执行的,而且大多数连接甚至可以在不使用临时表的情况下完成。大多数临时表都是基于内存的散列表。具有较大行长度(计算为所有列长度之和)或包含BLOB列的临时表存储在磁盘上。大多数执行排序的请求根据结果集大小分配一个排序缓冲区和0到两个临时文件。几乎所有的解析和计算都是在线程本地和可重用内存池中完成的。对于小的项目不需要内存开销,因此避免了通常缓慢的内存分配和释放。内存只分配给异常大的字符串。对于具有BLOB列的每个表,将动态地扩大缓冲区以读取更大的BLOB值。如果扫描一个表,缓冲区将增长到最大的BLOB值。MySQL需要内存和表缓存的描述符。所有正在使用的表的处理程序结构都保存在表缓存中,并以先入先出(FIFO)的方式管理。tableopencache系统变量定义了初始表缓存大小。MySQL还需要用于表定义缓存的内存。tabledefinitioncache系统变量定义了可以存储在表定义缓存中的表定义的数量。如果使用大量表,可以创建大型表定义缓存来加快表的打开速度。与表缓存不同,表定义缓存占用的空间更少,而且不使用文件描述符。FLUSHTABLES语句或mysqladminFLUSHTABLES命令会立即关闭所有未使用的表,并在当前正在执行的线程结束时将所有正在使用的表标记为关闭。这有效地释放了大部分使用中的内存。FLUSHTABLES直到所有表都被关闭后才返回。服务器通过GRANT、CREATEUSER、CREATEserver和INSTALLPLUGIN语句将信息缓存到内存中。该内存不会被相应的REVOKE、DROPUSER、DROPSERVER和UNINSTALLPLUGIN语句释放,所以对于一个执行了许多导致缓存的语句实例的服务器来说,缓存内存的使用会增加,除非使用FLUSH特权释放它。在复制拓扑中,以下设置会影响内存占用率,可根据需要进行调整:
  1)复制源上的maxallowedpacket系统变量限制源发送给其副本进行处理的最大消息大小。该设置默认为64M。
  2)多线程副本上的slavependingjobssizemax系统变量设置了用于保存等待处理的消息的最大内存量。该设置默认为128M。内存只在需要时分配,但如果复制拓扑有时处理大型事务,则可能会使用内存。这是一个软限制,可以处理较大的事务。
  3)复制源或副本上的rplreadsize系统变量控制从二进制日志文件和中继日志文件读取的最小数据量(以字节为单位)。缺省值是8192字节。为每个读取二进制日志和中继日志文件的线程分配这个值大小的缓冲区,包括源上的转储线程和副本上的协调线程。
  4)binlogtransactiondependencyhistorysize系统变量限制了作为内存历史记录保存的行散列的数量。
  5)maxbinlogcachesize系统变量指定单个事务使用内存的上限。
  6)maxbinlogstmtcachesize系统变量指定语句缓存使用内存的上限。
  Ps和其他系统状态程序可能会报告mysqld使用了大量内存。这可能是由不同内存地址上的线程堆栈引起的。例如,Solaris版本的ps将堆栈之间未使用的内存计算为使用内存。要验证这一点,请使用swaps检查可用的交换。我们用几个内存泄漏检测器(商业的和开源的)测试mysqld,所以应该没有内存泄漏。二。监控MySQL内存使用
  下面的例子演示了如何使用PerformanceSchema和sysSchema来监控MySQL内存使用情况。
  大多数PerformanceSchema内存检测在默认情况下是禁用的。可以通过更新PerformanceSchemasetupinstruments表的enabled列来启用Instruments。内存工具的名称以Memorycodeareainstrumentname的形式出现,其中codearea是一个值,比如sql或innodb,而instrumentname是工具细节。要查看可用的MySQL内存工具,请查询PerformanceSchemasetupinstruments表。下面的查询为所有代码区域返回数百个内存工具。
  根据MySQL的安装情况,代码区域可能包括performanceschema、sql、client、innodb、myisam、csv、memory、blackhole、archive、partition等。mysqlSELECTFROMperformanceschema。setupinstrumentsWHERENAMELIKEmemoryinnodb;NAMEENABLEDTIMEDPROPERTIESVOLATILITYDOCUMENTATIONmemoryinnodbadaptivehashindexYESNULL0NULLmemoryinnodblogandpagearchiverYESNULL0NULLmemoryinnodbbufbufpoolYESNULLglobalstatistics0NULLmemoryinnodbbufstatperindextYESNULL0NULLmemoryinnodbcloneYESNULL0NULLsnipmemoryinnodbut0sortYESNULL0NULLmemoryinnodbut0stageYESNULL0NULLmemoryinnodbut0utYESNULL0NULLmemoryinnodbut0vecYESNULL0NULLmemoryinnodbut0wqueueYESNULL0NULLmemoryinnodbzipdecompressYESNULL0NULL206rowsinset(0。01sec)mysql要启用内存工具,请在MySQL配置文件中添加一个性能模式工具规则。例如,要启用所有内存工具,请将此规则添加到配置文件中并重新启动服务器:performanceschemainstrumentmemoryCOUNTED
  重新启动服务器后,PerformanceSchemasetupinstruments表的ENABLED列应该报告您启用的内存工具的YES。对于内存工具,setupinstruments表中的TIMED列将被忽略,因为内存操作不是定时的。查询存储仪器数据。在本例中,内存工具数据在PerformanceSchemamemorysummaryglobalbyeventname表中查询,该表通过EVENTNAME汇总数据。EVENTNAME是工具的名称。mysqlSELECTFROMperformanceschema。memorysummaryglobalbyeventnameWHEREEVENTNAMELIKEmemoryinnodbbufbufpoolG1。rowEVENTNAME:memoryinnodbbufbufpoolCOUNTALLOC:4COUNTFREE:0SUMNUMBEROFBYTESALLOC:548143104SUMNUMBEROFBYTESFREE:0LOWCOUNTUSED:0CURRENTCOUNTUSED:4HIGHCOUNTUSED:4LOWNUMBEROFBYTESUSED:0CURRENTNUMBEROFBYTESUSED:548143104HIGHNUMBEROFBYTESUSED:5481431041rowinset(0。01sec)
  可以使用sys模式memoryglobalbycurrentbytes表查询相同的底层数据,该表按分配类型显示了全局服务器中当前的内存使用情况。mysqlSELECTFROMsys。memoryglobalbycurrentbytesWHEREeventnameLIKEmemoryinnodbbufbufpoolG1。roweventname:memoryinnodbbufbufpoolcurrentcount:4currentalloc:522。75MiBcurrentavgalloc:130。69MiBhighcount:4highalloc:522。75MiBhighavgalloc:130。69MiB1rowinset(0。00sec)
  这个sys模式查询通过代码区域聚合当前分配的内存(currentalloc):mysqlSELECTSUBSTRINGINDEX(eventname,,2)AScodearea,FORMATBYTES(SUM(currentalloc))AScurrentallocFROMsys。xmemoryglobalbycurrentbytesGROUPBYSUBSTRINGINDEX(eventname,,2)ORDERBYSUM(currentalloc)DESC;codeareacurrentallocmemoryinnodb614。42MiBmemoryperformanceschema218。81MiBmemorysql10。70MiBmemorymysys8。67MiBmemorytemptable1。00MiBmemorymysqldopenssl150。29KiBmemorymyisam6。40KiBmemorymysqlx2。62KiBmemorycsv88bytesmemoryblackhole88bytesmemoryvio16bytes11rowsinset(0。01sec)mysql三。开始largepage支持
  一些硬件操作系统架构支持大于默认值(通常为4KB)的内存页。这种支持的实际实现取决于底层硬件和操作系统。由于翻译后备缓冲区(TranslationLookasideBuffer,TLB)错过的次数减少,执行大量内存访问的应用程序可以通过使用大页面来提高性能。
  在MySQL中,InnoDB可以使用大页来为它的缓冲池和额外的内存池分配内存。
  MySQL中大页面的标准使用尝试使用最大支持的大小,最多4MB。在Solaris下,一个超大页面特性支持使用最多256MB的页面。该特性可用于最近的SPARC平台。可以通过使用超大页或跳过超大页选项来启用或禁用它。
  MySQL还支持Linux实现的大页面支持(在Linux中称为HugeTLB)。
  在Linux上使用大页面之前,必须启用内核来支持它们,并且必须配置HugeTLB内存池。HugeTBLAPI在Linux源码的Documentationvmhugetbpage。txt文件中有文档说明,供参考。
  最近的一些系统(如RedHatEnterpriseLinux)的内核似乎在默认情况下启用了大页面特性。要检查你的内核是否正确,使用下面的命令并寻找包含huge的输出行:11rowsinset(0。01sec)mysqlexitBye〔roothp2〕〔roothp2〕〔roothp2〕〔roothp2〕catprocmemin
  非空命令输出表明存在大页面支持,但0值表明没有配置页面供使用。
  如果您的内核需要重新配置以支持大页面,请参阅hugetlbpage。txt文件以获得说明。
  假设您的Linux内核启用了大页面支持,使用以下命令配置MySQL使用它。通常,您将这些文件放在rc文件或在系统引导序列期间执行的等价启动文件中,以便在每次系统启动时执行这些命令。这些命令应该在引导顺序的早期执行,在MySQL服务器启动之前。请确保根据您的系统更改分配号和组号。Setthenumberofpagestobeused。Eachpageisnormally2MB,soavalueof2040MB。Thiscommandactuallyallocatesmemory,sothismuchmemorymustbeavailable。echo20procsysvmnrhugepagesSetthegroupnumberthatispermittedtoaccessthismemory(102inthiscase)。Themysqlusermustbeamemberofthisgroup。echo102procsysvmhugetlbshmgroupIncreasetheamountofshmempermittedpersegment(12Ginthiscase)。echo1560281088procsyskernelshmmaxIncreasetotalamountofsharedmemory。Thevalueisthenumberofpages。At4KBpage,419430416GB。echo4194304procsyskernelshmall
  对于MySQL的使用,您通常希望shmmax的值接近于small的值。
  要验证大页面配置,请按照前面所述再次检查procmeminfo。现在你应该看到一些非零值:shellcatprocmeminfogrepihugeHugePagesTotal:20HugePagesFree:20HugePagesRsvd:0HugePagesSurp:0Hugepagesize:4096kB
  使用hugetlbshmgroup的最后一步是给mysql用户一个无限的memlock限制值。这可以通过编辑etcsecuritylimits。conf或者在mysqldsafe脚本中添加以下命令来实现:ulimitlunlimited
  在mysqldsafe中添加ulimit命令会导致root用户在切换到mysql用户之前将memlock限制设置为unlimited。(这假设mysqldsafe是由root启动的。)
  MySQL中的大页面支持默认是禁用的。要启用它,请使用largepages选项启动服务器。例如,您可以在服务器my。cnf文件中使用以下行:〔mysqld〕largepages
  使用这个选项,InnoDB自动使用大页面作为缓冲池和额外的内存池。如果InnoDB不能做到这一点,它会退回到使用传统内存,并在错误日志中写一个警告:Usingconventionalmemorypool
  转载https:www。modb。prodb84350

IntelNUC11小主机,实测内存频率对核显性能影响升级SIntel的十一代NUC主机发布有一段时间了,我入手的比较晚,有很多朋友已经发过使用体验了,但我还是抽空写下这篇原创,因为本篇可以分享给大家以下内容:1。有了NUC11之……各个年龄层次现在都用什么手机?根据极光大数据发布的2017第一季度中国智能手机的数据报告显示,大部分年轻人使用的手机品牌为vivo和OPPO,其中年龄在16岁到25岁的用户在vivo和OPPO的所有年龄层用……广电总局要求停止宣传推销槟榔及制品iPhone13秒没苹果官今日头条1。微信聊天将可访问外链,在保证安全的情况下更好地实现互联互通9月17日,腾讯对外公布关于互联互通第一阶段进展。腾讯表示,自9月17日起,用户升级最新版本微……你应该马上更新你的iPhone软件,这是为什么?和其他设备制造商一样,苹果一直在发布软件更新,但最新的更新可能比大多数都更重要。iPhone用户正面临一个软件漏洞,独立研究人员称该漏洞被用来监视一名沙特活动人士。周一,……为了环保,iPhone13去除塑料膜,再无撕膜体验苹果产品的包装又变了。在与去年,苹果以环保之名,iPhone1112取消赠送充电头。对于此事,遭遇很多网友吐槽,买个手机特么充电头都没有,难道手机用完电就丢掉嚒。直到iP……有没有一款以星空为背景的游戏?eve不错,还可以打群架,就是有些内容比较多开局会比较懵逼。百度搜eve欧服就能下,强烈建议前期加几个新人群,不懂就问。说话一定要客气。精品好游每日推,找游戏找虫哥……华强北苹果S6智能手表?值得买吗?AppleWatchSeries6是苹果公司旗下的智能手表,于2020年9月16日秋季发布会举行发布,紧接着华强北推出了一款智能手表m26plus,其外形功能与苹果手表S6一样……从淘集集到贝店暴雷分销类社交电商败退之谜不久前,知名母婴社交电商贝店商家维权事件成为今年8月份社交电商领域最大的热点新闻,相继全国多家媒体进行了跟踪报道。此次维权不仅有商家直接去贝贝网总部拉横幅维权,也有千人微信维权……从5488跌至2550,鸿蒙系统麒麟芯片IP68,网友终于等华为近期发布了几款4G手机,这也是无奈之举,因为华为没有5G射频可用,也生产不出5G芯片,供应商也不敢提供,因此只好推出4G手机,华为P50全系也是4G手机,不过搭载的是麒麟9……新能源汽车新龙头,震荡上行趋势确立,值得关注新能源汽车制造公司最近表现得十分活跃,以长安、北汽蓝谷、比亚迪为代表的新能源汽车企业受到了市场的广泛关注。除了以上列举的这些熟悉的汽车企业,广汽集团这家汽车制造公司作为新能源汽……丰田看好氢燃料,大众和特斯拉却瞧不上!发展氢能源愚蠢吗?自燃油车诞生至今,已经有一百多年的历史。到了现在,燃油车早已成为了人们生活出行必不可少的一种交通工具。不过,事物的发展总会慢慢经历生长期、鼎盛期和衰落期。随着交通工具的不……中国移动电信联通三家相比,谁的价格更亲民,服务更到位?中国移动、中国联通、中国电信三大通信运营商相比,联通的手机套餐资费价格更亲民,中国移动的服务更到位。以下简单分析一下1、中国移动的网络覆盖是三大通信运营商中信号覆盖……
被恒大坑的人有很多,请问谁最可怜?谁最可恶?所有国人都是可怜人,到目前还不知道恒大欠自己钱的人最可怜。恒大欠债近两万亿,欠谁的钱?银行。是欠银行的吗?表面是的。银行是谁的?是国家的。国家是谁的?是人民的。人民都有谁……哥斯拉推迟上映怎么回事哥斯拉推迟什么时候上映近日,电影《哥斯拉大战金刚》传消息称延迟上映时间,将推迟八个月之后上映,这是怎么回事呢?哥斯拉推迟什么时候上映呢?一起来看一下具体的情况。哥斯拉推迟上映怎么回事近日……复仇者联盟3片尾彩蛋复仇者联盟3片尾彩蛋出现惊奇队长复仇者联盟3片尾彩蛋:复仇者联盟3片尾彩蛋出现惊奇队长复仇者联盟3彩蛋有哪些片尾彩蛋出现惊奇队长斗玩网(d。chinaz。com)原创:复仇者联盟3电影已经在国内上映,电……推荐10部日本经典伦理电影日本的成人电影质量可是非常高的,这个观点老司机们肯定都非常赞同了,下面10部日本经典伦理电影,18岁以下不要看!110部日本经典伦理电影1、《不道德的伦理》很多场激情戏女……斗破苍穹电视剧来袭剧情介绍及林允吴磊剧照斗破苍穹电视剧来袭:剧情介绍及林允吴磊剧照改编自天蚕土豆同名小说的电视剧《斗破苍穹》,吴磊、林允担当主演。这部电视剧什么时候播出呢?ldquo;斗破苍穹电视剧什么时候上映……怎么将手机上的投影到电视上或墙上?我们日常在家里的时候,使用手机观看直播或者电影,有时候觉得屏幕太小,会选择将手机投屏到更大的显示器上面观看,那么具体我们该如何操作呢?下面小编给大伙说说。手机投屏到电视上……侍神令怎么这么神秘侍神令和晴雅集有什么区别今年的春节档可谓是诸神之战啊,阵容真是太豪华了,其中《侍神令》也是让小编印象很深的啊。《侍神令》由陈坤、周迅、陈伟霆、屈楚萧、王丽坤等主演,光看这阵容也是忍不住去看一下啊。其实……科技部部长中国科技开放的大门只会越开越大中新网北京2月25日电(记者孙自法)中国科学技术部(科技部)部长王志刚25日强调,在改革开放历程中,科技开放始终走在前列。面向未来,中国科技开放的大门只会越开越大。国务院……晴雅集中发妖的情人是谁揭晓晴雅集发妖的秘密电影晴雅集中发妖想必了解的人不多吧,那么,晴雅集中发妖的情人是谁?晴雅集发妖的秘密你又知道多少,下面昕薇网小编给大家揭晓一起去看看吧。1晴雅集中发妖的情人是谁已知晴雅集中……晴雅集长平公主有原型吗结局及原名曝光晴雅集长平公主有原型吗?据悉,晴雅集中长平公主的原型就是日本传说中的八百比丘尼。传说她因为食人鱼肉而长生不老,等到活到将近八百岁的时候,就一个人独自进入濑山的洞穴里,断食至死。……小米回应安卓12开发版部分场景重启等问题部分优化今日下午,小米官方发布公告,针对用户反馈的热门问题,带来了小米官方回复进展通报。其中,针对抖音App在部分机型闪退的问题,小米官方表示,已反馈App开发者优化,请用户更新……电影晴雅集彩蛋是什么晴雅集的剧情及结局是什么近日,相信很多人都知道郭敬明的新电影《晴雅集》已经上映了,影片的彩蛋在网上十分的火爆,电影《晴雅集》的彩蛋是什么呢?《晴雅集》的剧情及结局是什么?一起来看一下具体的情况。1电影……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网