叶金荣 程序猿都该知道的MySQL秘籍
2020-02-27 56浏览
- 1.程序猿都该知道的 MySQL秘籍 ݨᰂឍhttp://imysql.comلռݩғimysql_wx 2016.5.14
- 2.关于我 • ݨᰂឍ • Oracle MySQL ACE • ࢵ๋ٖጱMySQLവଠᘏ • From 2006҅http://imysql.com• ԪMySQLፘىૡ֢10֟ଙ • ᳩMySQLᚆս۸ • ሿӫဳMySQL DBAՈङِ • لռݩғimysql_wxҁMySQLӾᗑ҂
- 3.Agenda • MySQLս۸ᑃᔁ • InnoDB or MyISAMҘ • InnoDBᤒଫᧆெԍሻ • ӞԶս۸݇ᘍ • ᶋَࣳDBAெԍሻঅMySQL • ๗இጱ5.7ෛᇙ
- 4.先从一个 成见 开始
- 5.还死守MyISAM?out了 • ग़ٟጱ࣋วӥ҅፥ጱMyISAM੪ݳᭇހ • რ᩸ғInnoDBᬮฎMyISAM ٚ᧨MySQLਂؙකጱᭌೠ • TAᥡᅩ • MyISAMጱᚆฎྲInnoDB୩ӧ • MyISAMᔱහഝ҅ړӬᔱํܴᖽٖ҅ਂֵአሲፘๅṛ • MyISAMݢզፗളᥟፍMYD/MYIկ௩॔හഝ҅ፘๅள • count(*)order byපሲ֗҅Ӭcount(*)տᲁᤒ • InnoDBጱinsertupdateॡளԧ҅ᛘପๅӧӤ • MyISAMํmergeᔄࣳ҅ݢզள᭛count(*)
- 6.InnoDB的好处 • ౯ጱᥡᅩ • य़ग़හӱۓӾ҅95%զӤጱ࣋ว҅᮷ݢզአInnoDBක • InnoDBݢզහഝ̵ᔱ̵ํץදጱහഝනࣁٖਂbufferӾ҅ᘒӬํᛔᭇଫߢᔱ ̵change buffer mergeᒵᒵ҅ԪਫӤๅṛප • InnoDBԞݢፗളڊᤒᑮᳵկࣁ҅ݸፓຽ๐ۓӤ̶ف୮ᆐԧ҅ӧᚆፗളࣁᕚ ೩ᨬ҅ᵱᥝᑖ॒ےቘ҅֕ଚӧἋᅸ • ဌํᔱ҅count(*)order byᙗਧපሲ֗҅ӧړ܄ක̶InnoDBฎԪۓᤒ҅ಅզ قᤒҁ෫WHEREկ҂count(*)ᏟਫտౌӞԶ҅֕ଚӧտᲁᤒ • InnoDBጱinsertupdateॡளԧ҅ᛘପๅӧӤ —- টጱ҅ᬯӻᒌ౮ԧᗌᅩҘ • MyISAMํmergeᔄࣳ҅ݢզள᭛count(*) —- ݢզአᤒ܄ړᇙ҅ইຎՐՐ ݝฎԅԧCOUNT(*)҅ݢڞզአredisᒵᒫӣොᦇහ
- 7.赶紧转投InnoDB怀抱 • MyISAM౮InnoDBጱঅ॒ • ਠෆԪۓᇙඪ೮҅឴ๅṛଚݎTPSҔ • ඪ೮crash recovery̶MyISAMӧᚆᛔۖ҅॔ץӬᘙๅ ԋҔ • ԪਫӤ҅ݝපሲๅṛ̶ࢩԅInnoDBහഝ݊ᔱݶන ࣁbufferӾ҅ᘒMyISAMݝڞᖨਂԧᔱҔ • ݇ᘍғ[MySQL FAQ]ᔮ — ڜMyISAMکInnoDBᵱᥝဳ Ջԍ
- 8.so,InnoDB怎么玩好?
- 9.InnoDB的正确玩法 • Ḓ҅ضᥝྋᏟᦊᦩInnoDB • चԭB+ᕮጱᘸᵞᔱᕟᕢᤒҁᔄ֒ORACLEጱIOT༷ஷ҂ • ᤒහഝጱ᭦ᬋਂؙᶲଧݐ٬ԭᘸᵞᔱጱᶲଧ • ἕᦊᭌೠԆᲫ֢ԅᘸᵞᔱ҅෫ݳᭇԆᲫ҅੪አٖᗝኞ౮ጱ ROW_ID֢ԅᘸᵞᔱ • InnoDBጱᤈᲁฎࣁےᔱӤጱ • ඪ೮4ӻԪۓᵍᐶᕆ҅ڦἕᦊጱRRᥴ٬ԧଝᳯ᷌
- 10.InnoDB的正确玩法
- 11.InnoDB的正确玩法 • InnoDBᤒ᮷ᥝํӞӻԆᲫ҅ӬԆᲫ๋অဌํӱۓአ᭔҅ӧᥝץදԆᲫ • ԆᲫ๋অฎכ೮ᶲଧ᭓ी҅ᵋԆᲫտᛘᘸᵞᔱ᷇ᔺړ҅ᵋI/O ीग़҅හഝᐶව҅ᚆӥᴳ • ᝑ෫ᇙྛᵱᥝ҅ᥝސԪۓᛔۖԻ autocommit=1̶य़Ԫۓೆړ౮ग़ӻੜ Ԫ҅ۓੜྍள᪒ොୗړԻ҅ํعय़Ԫۓ๚Իᛘᳩᳵᤈᲁᒵஇ • ဌํᔱጱๅෛ҅ݢᚆտᛘقᤒහഝ᮷ᤩᲁ֘҅ᤒᕆᲁᒵݸݶຎ • ਧԎંڜ҅ᳩଶᶼड़አ੪অ҅ဌᥝአᇙڦय़ጱහഝᔄ̶ࣳVARCHAR/ TEXTᒵහഝᔄࣳӾਫᴬਂؙහഝᳩଶ᩼ੜ᩼অ҅ݎڞވኞᤈფڊҁoff-page storage҂ᚆߥݢᚆஉय़ • ӧᥝፗളSELECT *قݐ᮱ݢ҅ڜᚆտᛘๅग़ጱI/O
- 12.一些优化参考
- 13.联合索引怎么用 • ᘶݳᔱk1ҁc1, c2, c3҂ • ӥᶎߺӻSQLӧᚆਠෆአکෆӻᘶݳᔱጱҘ • WHERE c1 = ? AND c2 IN (?, ?) AND c3 = ? √ • WHERE c1 = ? AND c2 =? ORDER BY c3 √ • WHERE c3 = ? AND c1 = ? AND c2 IN (?, ?) √ • WHERE c1 = ? AND c2 IN (?, ?) ORDER BY c3 x • 5.6զڹୌᦓෛी (c1, c3) ᔱ҅5.6զݢݸզአICPᇙ
- 14.JOIN怎么优化 • inner join
- 15.JOIN怎么优化 • straight join
- 16.JOIN怎么优化 • INNER JOINฎᛔۖᭌೠJOINᶲଧ҅ݢᚆӧฎ๋ս • LEFT JOIN & STRAIGHT_JOIN ᮷ฎ୩ૢګᬟጱᤒ ֢ԅḝۖᤒ • RIGHT JOINڞፘݍ • ग़ᤒJOINӾ҅ഭଧڜইຎӧંԭḝۖᤒ҅ڞ෫ဩڥ አᔱਠ౮ഭଧ
- 17.硬件、系统、配置选项 优化
- 18.硬件优化
- 19.系统优化 • io scheduler • deadline • noop • ࣙ٬ӧᚆcfq
- 20.系统优化
- 21.系统优化 • fs • xfs • ext4̵zfsᒵ • ࣙ٬ӧᚆext3
- 22.系统优化
- 23.MySQL参数优化 • innodb_buffer_pool_size҅ᕅᇔቘٖਂጱ50% ~ 70% • innodb_data_file_path҅ڡত۸य़ੜᛗ1G • 5.6զӤᇇ҅ᦡᗝᇿᒈundoᤒᑮᳵ • innodb_log_file_size҅5.5݊զӤ1GզӤ҅5.5զӥୌᦓӧ᩻512M • innodb_flush_log_at_trx_commit҅0=>๋ளහഝ๋ӧਞ҅ق1=>๋ౌ๋ਞ ҅ق2=>ರӾ • innodb_max_dirty_pages_pct҅25%~50%ԅ • innodb_io_capacity҅ฦ᭗༁ፏ=>1000ૢ҅ݦSSD=>10000ૢ҅ݦPCIe SSD=>20000զӤ
- 24.MySQL参数优化 • key_buffer_size҅ᦡᗝ32Mզӥ • sync_binlog҅0=>๋ளහഝ๋ӧਞ҅قᔮᕹᛔ૩٬ਧڬෛbinlogጱ᷇ ሲҔ1=>๋ౌ๋ਞྯ҅قӻeventڬෛӞེҔN=>ྯNӻԪڬۓӞེbinlog • long_query_time҅ୌᦓᦡᗝੜԭ0.5ᑁ • open_files_limit & innodb_open_files҅ୌᦓ65535 • max_connections҅ᑱ๋ݎय़ᬳളහጱ80%ԅ҅ᬦय़ฃᛘق᮱ྒܜ • thread_handling = “pool-of-thread”҅ސአᕚᑕ • query_cache_size & query_cache_type҅ىᳮ
- 25.没踩过 坑 的都非正常人
- 26.有哪些坑 • QUERY CACHE҅ᓌᑍQC • ᕷय़ग़හఘ٭ӥểᙃ๋҅অىᳮ • QCᲁฎقੴᲁ҅ྯེๅෛQCጱٖਂࣘᲁդհṛ҅உ ฃڊሿWaiting for query cache lockᇫா • query_cache_size =0 & query_cache_type = 0҅ىᳮ • ݇ᘍғhttp://t.cn/RAF4d7zhttp://t.cn/RAF4d7Z
- 27.ibdata1文件暴增 • ibdata1կ᮷ਂؙԧՋԍٖҘ • Data dictionary • Double write buffer • Insert buffer • Rollback segments • UNDO space • Foreign key constraint system tables
- 28.ibdata1文件暴增 • ibdata1կูीܻࢩ • य़ᰁԪ҅ۓԾኞय़ᰁጱundo log • ํ෯Ԫۓᳩᳵ๚Ի҅Ծኞय़ᰁ෯undo log • file i/oᚆ૧҅purgeᬰଶౌ • 32bitᔮᕹӥํbug
- 29.ibdata1文件暴增 • ibdata1կูीᥴ٬ • ܋ᕆک5.6݊զӤҁ64-bit҂҅አᇿᒈundoᤒᑮᳵ • ीےpurgeᕚᑕහ innodb_purge_threads • ṛfile i/oᚆێ • Ԫ݊ۓԻ҅ӧᥝᑌܴ • ἕᦊautocommit = 1 • ༄ັݎຝ҅Ꮯᦊautocommit=0ጱࣈො҅Ԫۓᕮݸ᮷ํԻ ࢧ჻
- 30.隐式类型转换 • ํӻಋݩᎱڜ • iphone CHAR(11) NOT NULL DEFAULT ’’ • ํӥᶎᬯӻັᧃ • WHERE iphone = 13900000000
- 31.隐式类型转换 • ெԍᏈ • ද౮WHERE iphone = ’13900000000’ • iphone ڜᔄࣳද౮ BIGINT UNSIGNED
- 32.连接数过高 • too many connectionsጱ॒ቘ • ଉᥢጱ؉ဩғమېဩധग़֟ጱᬳള҅ےय़ᬳളහ • ٌਫଫᧆฎᬯғᴴګᬳളහ҅ᦡਧ max_user_connections • ইຎฎᬯޫғextra-port • ୌᦓғਧ༄ັ҅ଗധౌັᧃ҅عᴥल҅ᛔ౯כಷ
- 33.非典型DBA怎么玩好 MySQL
- 34.小规模集群怎么运维 • ॓ղ • mysqldumpҁਁᒧᵞ҂ => xtrabackupҁႰݳක҂ • ᛔۖ(ࣈ)॓ղ̵༄ັ̵௩॔ḵᦤ • ṛݢአ̵ඳᵑᑏ • +keepalivedṛݢአҁᚏ҂ • ग़MHAṛݢአҁᜓᅩग़҂ • ॓አࣈ಄ҁ౮ṛ҂ • ڥአ᬴॔ګᇙᶼᴠӸ᯿֢
- 35.表数据从十万到千万表怎么玩 • 10ӡᤒ҅Ӟᛱᶌᓌܔᔱ੪ᚆਧ • 100ӡᤒ҅ᵱᥝতᘍᡤࣁᕚDDLጱᷚᴾԧ҅զ݊ӞԶ᩻ᬦ1ᑁጱSQL • 1000ӡ҅ெԍ؉॓ղ҅Ӥᕚڹᶼض؉SQLᥴຉ҅ᶼᴠӸ᯿ෛๅᵙᳯ᷌ • ᵱᥝํᬀۗಋྦྷ҅ፊᥤ᩻ᬦNᑁጱSQL҅ᚆள᭛ᛔ॒ۖቘ҅ଚӬಸᦄڊ҅ ݸᖅ᪙ᬰս۸ • य़හഝᰁӥ҅ړପړᤒ๚ฎᱷ୨҅ݍᘒݢᚆฎᔴᩣ҅սض؉ٯᅾහഝړ ᐶ୭ • ړପړᤒսݶࣁضӞӻਫֺӥ҅ਫֺӞᛱᵱᥝᶌᨏጱproxyᤈ • pt-query-digest + anemometer
- 36.大量日志如何存储 • ਂفؙପսضአtokudbක • ܲݥ୭فय़හഝړຉଘݣ • ෭பᤒݢզೲᳵྦྷړᤒҁ܄ړ҂ • ਧ๗ڠୌ/ڢᴻ/୭ړᤒҁ܄ړ҂
- 37.拥抱5.7
- 38.从5.6升级方案 • ᭦ᬋ܋ᕆොໜ • mysqldumpڊ • ෛୌਫֺ҅҅ف௩॔හഝ • ᇔቘ܋ᕆොໜ • fast_shutdown=0 • ೩ᨬᇔቘկxtrabackup॓ղ • ෛୌਫֺ҅௩॔හഝҁredo̵undo log໒ୗӧӞ҅ᵱᥝ᯿ෛڡত۸҂ • አmysql_upgrade܋ᕆP_S̵I_S̵mysqlପ • ӧവគ5.5ک5.7ፗള܋ᕆ
- 39.5.7重大变化 • ᐬአጱۑᚆ • innodb monitor tableۑᚆ • አinnodb_status_output̵ innodb_status_output_locksى • old-password໒ୗ • ӧਞ҅ق᩷ᔲ܋ᕆঅԧ • skip-innodbᭌᶱҁӧᚆᐬአInnoDBԧ҂
- 40.值得关注的MySQL 5.7 新特性 • ਞق҅܋୩۸ᨴಁᓕቘ݊ੂᎱᒽኼ • ڡতਞᤰἕᦊտᦡᗝᵋੂᎱҁḒེጭݸفᵱץද҂ • ڡত۸ᵋੂᎱਂכԭerror logӾ • ํݝroot@localhostᨴ҅ݩٚ෫ݷ܇ᨴݩ • ෛᨴڠݩୌੂݸᎱἕᦊํᬦ๗ᳵ • 5.7.10ڹἕᦊ360ॠ҅5.7.10ݸἕᦊ0ॠҁӧᬦ๗҂ • ඪ೮SSL/TLS᱾ളොୗ
- 41.值得关注的MySQL 5.7 新特性 • ຽٵ۸҅܋ӧّٚӞԶ“ӧᥢ”አဩ • ἕᦊސአSTRICT_TRANS_TABLES̵ NO_ZERO_IN_DATE̵ ERROR_FOR_DIVISION_BY_ZERO ᒵپᐿᥢڞ • ֺইғݻCHAR(20)ٟف30ӻਁᒧտಸᲙ҅ᘒӧՐ ฎᦄޞ • ӧٚᤩᧀየ“ॡฬᚆ”ԧ
- 42.值得关注的MySQL 5.7 新特性 • ۑᚆֵ҅܋አ᩸ๅڥ • Online DDLी୩ • InnoDBකࣁץᕚ᧣ෆVARCHARᳩଶ • ीے/ץදᶋԆᲫڜ᎖ᳵਠ౮ • ץදᔱݷҁᶋԆᲫ҂ • InnoDB buffer poolᓕቘी୩ • ࣁᕚۖா᧣ෆ • ڊفी୩
- 43.值得关注的MySQL 5.7 新特性 • ᚆय़ଏ܋ • InnoDBFusion-io Non-Volatile Memory (NVM)ܻኞඪ೮ • InnoDBᔱڠୌ̵᯿ୌಢᰁے҅ṛපሲ • Optimizer Hints • ᯿ٟԧय़᮱ړᥴຉ҅ս۸౮ཛྷࣳ • InnoDBݝԪۓᚆ܋ • දᬰ InnoDB ጱݢಘԁᤒጱᚆ҅ᘒਫሿๅளጱᗑᕶ य़හഝےᒵ֢
- 44.值得关注的MySQL 5.7 新特性 • ॔ۑګᚆ܋ • ଚᤈ॔ګ܋ • ग़რ॔ګ • ࣁᕚץදreplication filter • ࣁᕚސአ GTIDs҅ी୩ጱګ॔ྍݶ • ඪ೮Group ReplicationҁਫḵӾ҂
- 45.值得关注的MySQL 5.7 新特性 • ෛᇙ • MySQL Router • ඪ೮Generated Columns • ඪ೮JSON • ीےsys schema • ඪ೮ग़ӻtrigger • ඪ೮GIS