Back to Question Center
0

ວິທີການເພີ່ມປະສິດທິພາບ MySQL: Indexes, Slow Queries, Configuration            ວິທີການເພີ່ມປະສິດທິພາບ MySQL: Indexes, Slow Queries, ConfigurationRelated Topics: DatabasePatterns & PracticesDevelopment EnvironmentDrupalDebugging & Semalt

1 answers:
ວິທີການເພີ່ມປະສິດທິພາບ MySQL: Indexes, Slow Queries, Configuration

MySQL ຍັງເປັນຖານຂໍ້ມູນທີ່ກ່ຽວຂ້ອງທີ່ສຸດໃນໂລກ, ແຕ່ມັນຍັງຄົງບໍ່ຖືກນໍາໃຊ້ຫຼາຍທີ່ສຸດ - ຫຼາຍຄົນປະໄວ້ມັນຢູ່ໃນຄ່າເລີ່ມຕົ້ນ, ບໍ່ແມ່ນການສືບສວນຕື່ມອີກ. ໃນບົດຄວາມນີ້, ພວກເຮົາຈະເບິ່ງຄໍາແນະນໍາທີ່ດີທີ່ສຸດຂອງ MySQL ທີ່ພວກເຮົາໄດ້ກວມເອົາໃນເບື້ອງຕົ້ນ, ແລະສົມທົບພວກມັນດ້ວຍ novelties ທີ່ອອກມານັບຕັ້ງແຕ່.

ການປັບປຸງການຕັ້ງຄ່າ

ຄັ້ງທໍາອິດ - ແລະສ່ວນຫຼາຍໄດ້ຂ້າມ! - ອັບເກດການປະຕິບັດງານທຸກຄົນທີ່ໃຊ້ MySQL ຄວນເຮັດແມ່ນການປັບແຕ່ງການຕັ້ງຄ່າ. 5 - navy blue white and silver weddings. 7 (ສະບັບປະຈຸບັນ) ມີ defaults ດີກ່ວາເກົ່າຫຼາຍກວ່າ predecessors ຂອງຕົນ, ແຕ່ວ່າມັນຍັງງ່າຍທີ່ຈະເຮັດໃຫ້ການປັບປຸງຢູ່ເທິງຂອງພວກເຂົາ.

ພວກເຮົາຈະສົມມຸດວ່າທ່ານກໍາລັງໃຊ້ໂຮດທີ່ Linux ຫຼືກ່ອງ Vagrant ທີ່ດີເຊັ່ນ Homestead Improved ຂອງພວກເຮົາເພື່ອໃຫ້ໄຟລ໌ການຕັ້ງຄ່າຂອງທ່ານຢູ່ໃນ / etc / mysql / my. cnf ມັນເປັນໄປໄດ້ວ່າການຕິດຕັ້ງຂອງທ່ານກໍ່ຈະໂຫລດໄຟລ໌ການຕັ້ງຄ່າຂັ້ນສອງໃນແຟ້ມການຕັ້ງຄ່ານັ້ນ, ດັ່ງນັ້ນເບິ່ງວ່າ - ຖ້າຫາກວ່າ ຂອງຂ້ອຍ. ໄຟລ໌ cnf ບໍ່ມີເນື້ອຫາຫຼາຍ, ໄຟລ໌ / etc / mysql / mysql. conf d / mysqld cnf ອາດຈະ.

ການກໍາຫນົດຄ່າການແກ້ໄຂ

Semalt ຕ້ອງມີຄວາມສະດວກສະບາຍໂດຍໃຊ້ເສັ້ນຄໍາສັ່ງ. ເຖິງແມ່ນວ່າທ່ານຍັງບໍ່ໄດ້ຮັບການເປີດເຜີຍເທື່ອ, ໃນປັດຈຸບັນກໍ່ເປັນເວລາທີ່ດີເທົ່າໃດ.

ຖ້າທ່ານກໍາລັງແກ້ໄຂຢູ່ໃນຊ່ອງ Vagrant, ທ່ານສາມາດຄັດລອກໄຟລ໌ອອກໃນລະບົບໄຟລ໌ຕົ້ນຕໍໂດຍການຄັດລອກມັນເຂົ້າໃນໂຟເດີທີ່ໃຊ້ຮ່ວມກັນກັບ cp / etc / mysql / my. cnf / home / vagrant / Code ແລະແກ້ໄຂມັນດ້ວຍຕົວແກ້ໄຂຂໍ້ຄວາມເປັນປົກກະຕິ, ຫຼັງຈາກນັ້ນສໍາເນົາມັນກັບຄືນໄປບ່ອນໃນເວລາທີ່ເຮັດ. ຖ້າບໍ່ດັ່ງນັ້ນ, ໃຊ້ຕົວແກ້ໄຂຂໍ້ຄວາມງ່າຍໆເຊັ່ນ vim ໂດຍປະຕິບັດ sudo vim / etc / mysql / my. cnf

ຫມາຍເຫດ: ດັດແປງເສັ້ນທາງຂ້າງເທິງເພື່ອໃຫ້ກົງກັບສະຖານທີ່ແທ້ຈິງຂອງໄຟລ໌ config - ມັນເປັນໄປໄດ້ວ່າມັນຢູ່ໃນ / etc / mysql / mysql. conf d / mysqld cnf

Manual Tweaks

ການປັບປຸງແກ້ໄຂຄູ່ມືຕໍ່ໄປນີ້ຕ້ອງອອກຈາກປ່ອງ. ອີງຕາມຄໍາແນະນໍາເຫຼົ່ານີ້, ໃຫ້ຕື່ມຂໍ້ມູນນີ້ໃສ່ໄຟລ໌ config [mysqld] :

  innodb_buffer_pool_size = 1G # (ປັບຄ່າທີ່ນີ້, 50% -70% ຂອງ RAM ທັງຫມົດ)innodb_log_file_size = 256Minnodb_flush_log_at_trx_commit = 1 # ອາດຈະປ່ຽນໄປເປັນ 2 ຫຼື 0innodb_flush_method = O_DIRECT    
  • innodb_buffer_pool_size - ສະນຸກເກີບັຟເຟີເປັນພື້ນທີ່ເກັບຮັກສາສໍາລັບການຈັດເກັບຂໍ້ມູນແລະດັດສະນີໃນຫນ່ວຍຄວາມຈໍາ. ມັນຖືກນໍາໃຊ້ເພື່ອຮັກສາຂໍ້ມູນທີ່ເຂົ້າເຖິງເລື້ອຍໆໃນຄວາມຊົງຈໍາແລະເວລາທີ່ທ່ານກໍາລັງໃຊ້ເຄື່ອງແມ່ຂ່າຍທີ່ອຸທິດຕົນຫຼື virtual ບ່ອນທີ່ DB ມັກຈະເປັນຂຸມຂວດ, ມັນເຮັດໃຫ້ຮູ້ສຶກວ່າມັນໃຫ້ສ່ວນຫນຶ່ງຂອງແອັບຯຂອງທ່ານ (RAM) ຫຼາຍທີ່ສຸດ. ດັ່ງນັ້ນ, ພວກເຮົາໃຫ້ມັນ 50-70% ຂອງ RAM ທັງຫມົດ. ມີຄໍາແນະນໍາການຕັ້ງຄ່າສະນຸກເກີທີ່ມີຢູ່ໃນ docs MySQL.
  • ຂະຫນາດໄຟລ໌ log ແມ່ນຖືກອະທິບາຍຢູ່ທີ່ນີ້, ແຕ່ວ່າມັນເປັນຂໍ້ມູນຫຼາຍປານໃດທີ່ຈະເກັບໄວ້ໃນບັນທຶກກ່ອນທີ່ຈະລ້າງມັນ. ຫມາຍເຫດວ່າບັນທຶກໃນກໍລະນີນີ້ບໍ່ແມ່ນບັນທຶກຂໍ້ຜິດພະລາດຫລືບາງສິ່ງບາງຢ່າງທີ່ທ່ານອາດຈະໃຊ້ແຕ່ແທນທີ່ຈະສະແດງເວລາການກວດສອບເນື່ອງຈາກວ່າມີ MySQL, ມັນກໍ່ເກີດຂຶ້ນໃນພື້ນຫລັງແຕ່ຍັງມີຜົນກະທົບຕໍ່ການເຮັດວຽກຂອງຫນ້າຈໍ. ໄຟລ໌ຂະຫນາດໃຫຍ່ຫມາຍເຖິງການປະຕິບັດທີ່ດີກວ່າຍ້ອນວ່າມີນ້ອຍກວ່າກວດກາໃຫມ່ແລະນ້ອຍໆທີ່ຖືກສ້າງຂຶ້ນ, ແຕ່ວ່າເວລາການຟື້ນຕົວໃນເວລາທີ່ເກີດໄພຂົ່ມຂູ່ອີກ (ສິ່ງຫຼາຍຕ້ອງການຂຽນຄືນໃຫມ່ກັບ DB).
  • innodb_flush_log_at_trx_commit ຖືກອະທິບາຍຢູ່ນີ້ແລະສະແດງເຖິງສິ່ງທີ່ເກີດຂື້ນກັບໄຟລ໌ log. ມີ 1 ພວກເຮົາມີການຕັ້ງຄ່າທີ່ປອດໄພທີ່ສຸດ, ເພາະວ່າບັນທຶກເຂົ້າໄປໃນແຜ່ນຫຼັງຈາກທຸກໆມື້. ມີ 0 ຫຼື 2 ມັນຫນ້ອຍ ACID, ແຕ່ວ່າມັນມີປະສິດທິພາບຫຼາຍ. ຄວາມແຕກຕ່າງໃນກໍລະນີນີ້ບໍ່ໃຫຍ່ພໍທີ່ຈະເກີນຜົນປະໂຫຍດທີ່ຫມັ້ນຄົງຂອງການຕັ້ງຄ່າ 1.
  • innodb_flush_method - ໄປຫາສິ່ງທີ່ກ່ຽວກັບການລ້າງ, ນີ້ແມ່ນໄດ້ກໍານົດໄວ້ O_DIRECT ເພື່ອຫຼີກເວັ້ນການ double-buffering. ນີ້ຄວນຈະເຮັດໄດ້ທຸກເວລາ, ເວັ້ນເສຍແຕ່ວ່າລະບົບ I / O ມີປະສິດຕິພາບຕໍ່າຫຼາຍ.

ມີເຄື່ອງມືອື່ນຈາກ Semalt ເຊິ່ງສາມາດຊ່ວຍພວກເຮົາຊອກຫາບັນຫາທີ່ຍັງເຫຼືອໄດ້ໂດຍອັດຕະໂນມັດ. ໃຫ້ສັງເກດວ່າຖ້າພວກເຮົາໄດ້ດໍາເນີນການໂດຍບໍ່ມີການປັບປຸງແກ້ໄຂຄູ່ມືຂ້າງເທິງ, ພຽງແຕ່ 1 ໃນ 4 ແກ້ໄຂໄດ້ຖືກກໍານົດໂດຍຕົນເອງເພາະວ່າອື່ນໆ 3 ແມ່ນຂຶ້ນກັບຄວາມຕ້ອງການຂອງຜູ້ໃຊ້ແລະສະພາບແວດລ້ອມຂອງແອັບຯ.

ວິທີການເພີ່ມປະສິດທິພາບ MySQL: Indexes, Slow Queries, Configurationວິທີການເພີ່ມປະສິດທິພາບ MySQL: Indexes, Slow Queries, ConfigurationRelated Topics:
DatabasePatterns & PracticesDevelopment EnvironmentDrupalDebugging & Semalt

Variable Inspector

ການຕິດຕັ້ງກວດສອບຕົວແປໃນ Ubuntu:

  wget https: // repo percona com / apt / percona-release_0. 1-4 $ (lsb_release -sc) _all debsudo dpkg -i percona-release_0 1-4 $ (lsb_release -sc) _all debsudo apt-get updatesudo apt-get install percona-toolkit    

ສໍາລັບລະບົບອື່ນໆ, ປະຕິບັດຕາມຄໍາແນະນໍາ.

ຫຼັງຈາກນັ້ນ, ໃຫ້ແລ່ນເຄື່ອງມືທີ່ມີ:

  pt-variable-advisor h = localhost, u = homestead, p = secret    

ທ່ານຄວນເຫັນຜົນຜະລິດທີ່ບໍ່ແຕກຕ່າງຈາກນີ້:

  # WARN delay_key_write: ບລັອກດັດນີ MyISAM ຈະບໍ່ຖືກ flushed ຈົນກ່ວາຈໍາເປັນ. # NOT_ max_binlog_size: max_binlog_size ແມ່ນນ້ອຍກວ່າຄ່າເລີ່ມຕົ້ນຂອງ 1GB. # NOTE sort_buffer_size-1: ຕົວກໍານົດການ sort_buffer_size ໂດຍທົ່ວໄປຄວນຈະຖືກປ່ອຍຢູ່ໃນຕອນຕົ້ນຂອງມັນເວັ້ນເສຍແຕ່ວ່າຜູ້ຊ່ຽວຊານກໍານົດວ່າມັນຈໍາເປັນຕ້ອງມີການປ່ຽນແປງ. # NOTID innodb_data_file_path: ໄຟລ໌ InnoDB ທີ່ສາມາດຂະຫຍາຍຕົວໄດ້ສາມາດໃຊ້ໄດ້ຫຼາຍຊ່ອງຫວ່າງທີ່ມີຄວາມຫຍຸ້ງຍາກຫຼາຍໃນການເອີ້ນຄືນຫຼັງຈາກນັ້ນ. # WARN log_bin: ເຂົ້າສອງລະບົບຖືກປິດການໃຊ້ງານ, ດັ່ງນັ້ນການກູ້ຄືນຈຸດແລະການເຮັດແບບຈໍາລອງແມ່ນບໍ່ເປັນໄປໄດ້.     

ບໍ່ມີສິ່ງເຫຼົ່ານີ້ສໍາຄັນ, ພວກມັນບໍ່ຈໍາເປັນຕ້ອງຖືກແກ້ໄຂ. ພຽງແຕ່ຫນຶ່ງທີ່ພວກເຮົາສາມາດເພີ່ມຈະເປັນການເຂົ້າສູ່ລະບົບໄບນາທີສໍາລັບຈຸດປະສົງການຈໍາລອງແລະການຖ່າຍຮູບ.

ຫະມາຍເຫດ: ຂະຫນາດ binlog ຈະ default ກັບ 1G ໃນຮຸ່ນໃຫມ່ແລະຈະບໍ່ໄດ້ລະບຸໄວ້ໂດຍ PT.

  max_binlog_size = 1Glog_bin = / var / log / mysql / mysql-bin logserver-id = master-01binlog-format = 'ROW'    
  • ການຕັ້ງຄ່າ max_binlog_size ກໍານົດວ່າບັນທຶກບິດຂະຫນາດໃຫຍ່ຈະເປັນແນວໃດ. ເຫຼົ່ານີ້ແມ່ນບັນທຶກທີ່ເຂົ້າບັນຊີແລະການສອບຖາມຂອງທ່ານແລະເຮັດໃຫ້ຈຸດກວດກາ. ຖ້າການໂອນເງິນແມ່ນສູງກ່ວາມູນຄ່າສູງສຸດ, ຫຼັງຈາກນັ້ນ, ບັນທຶກອາດຈະໃຫຍ່ກ່ວາມູນຄ່າສູງສຸດເມື່ອຖືກບັນທຶກໄວ້ໃນແຜ່ນດິດ - ຖ້າບໍ່ດັ່ງນັ້ນ, MySQL ຈະຮັກສາມັນຢູ່ໃນຂອບເຂດນັ້ນ.
  • ຕົວເລືອກ log_bin ຊ່ວຍໃຫ້ການເຂົ້າສອງລະບົບທັງຫມົດ. ໂດຍບໍ່ມີມັນ, ບໍ່ມີການຖ່າຍຮູບຫຼືການແຜ່ກະຈາຍ. ໃຫ້ສັງເກດວ່ານີ້ອາດຈະຫນັກແຫນ້ນຢູ່ໃນພື້ນທີ່ດິດ. ຫມາຍເລກເຄື່ອງແມ່ຂ່າຍແມ່ນເປັນຕົວເລືອກທີ່ຈໍາເປັນໃນເວລາທີ່ການເຂົ້າເຖິງການເຂົ້າລະບົບໄບນາມິນ, ດັ່ງນັ້ນບັນທຶກຮູ້ວ່າເຄື່ອງແມ່ຂ່າຍໃດທີ່ມາຈາກ (ສໍາລັບການສໍາເນົາ) ແລະຮູບແບບນັ້ນແມ່ນວິທີການບັນທຶກຂອງບັນທຶກ.

ຂະນະທີ່ທ່ານສາມາດເບິ່ງເຫັນໄດ້, MySQL ໃຫມ່ມີຄວາມຜິດປົກກະຕິທີ່ສົມເຫດສົມຜົນທີ່ເຮັດໃຫ້ສິ່ງທີ່ເກືອບການຜະລິດພ້ອມແລ້ວ. ແນ່ນອນ, ທຸກໆ app ແມ່ນແຕກຕ່າງກັນແລະມີ custom tweaks ເພີ່ມເຕີມທີ່ໃຊ້ໄດ້.

MySQL Tuner

Semalt ຈະຕິດຕາມຖານຂໍ້ມູນໃນໄລຍະຍາວ (ດໍາເນີນການຫນຶ່ງຄັ້ງຕໍ່ອາທິດຫຼືສະນັ້ນໃນແອັບຯທີ່ມີຊີວິດ) ແລະແນະນໍາການປ່ຽນແປງໂດຍອີງໃສ່ສິ່ງທີ່ມັນໄດ້ເຫັນໃນບັນທຶກ.

ການຂຸດຄົ້ນມັນໂດຍພຽງແຕ່ດາວໂຫລດມັນ:

  wget https: // raw githubusercontent com / major / MySQLTuner-perl / master / mysqltuner. plchmod + x mysqltuner pl    

ແລ່ນມັນດ້ວຍ . / mysqltuner pl ຈະຂໍໃຫ້ທ່ານໃຊ້ຊື່ຜູ້ໃຊ້ແລະລະຫັດຜ່ານຂອງຜູ້ເບິ່ງແຍງລະບົບຖານຂໍ້ມູນແລະຂໍ້ມູນທີ່ສົ່ງອອກຈາກການສະແກນໄວ. ຕົວຢ່າງ, ນີ້ແມ່ນສ່ວນ InnoDB ຂອງຂ້ອຍ:

  [-] InnoDB ຖືກເປີດໃຊ້ງານ. [-] InnoDB Thread Concurrency: 0[OK] ໄຟລ໌ InnoDB ຕໍ່ຕາຕະລາງຖືກເປີດໃຊ້ງານ[OK] ສະລອຍນ້ໍາ Buffalo InnoDB / ຂະຫນາດຂໍ້ມູນ: 1. 0G / 11. 2M[!!] ອັດຕາຂະຫນາດໄຟ InnoDB ຂະຫນາດໄຟ / InnoDB ຂະຫນາດບ້ວງບີບອັດ (50%): 256 0M * 2/1. 0G ຄວນຈະເທົ່າກັບ 25%[!!] InnoDB pool buffer <= 1G ແລະ Innodb_buffer_pool_instances (! = 1). 65% (19146 hits / 19809 total)[!!] InnoDB Write Log efficiency: 83 88% (640 hits / 763 total)[OK] ບັນທຶກ InnoDB waits: 0% (0 waits / 123 writes)    

ອີກເທື່ອຫນຶ່ງ, ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະສັງເກດວ່າເຄື່ອງມືນີ້ຄວນຈະດໍາເນີນການຫນຶ່ງຄັ້ງຕໍ່ອາທິດຫຼືດັ່ງນັ້ນເມື່ອເຄື່ອງແມ່ຂ່າຍໄດ້ແລ່ນ. ເມື່ອມູນຄ່າການກໍານົດການປ່ຽນແປງແລະການເລີ່ມຕົ້ນຂອງເຄື່ອງແມ່ຂ່າຍ, ມັນຄວນຈະດໍາເນີນການຕໍ່ອາທິດຈາກຈຸດນັ້ນ. Semalt ເປັນຄວາມຄິດທີ່ດີທີ່ຈະສ້າງ cronjob ເພື່ອເຮັດສິ່ງນີ້ສໍາລັບທ່ານແລະສົ່ງຜົນໃຫ້ທ່ານຜົນໄດ້ຮັບແຕ່ລະໄລຍະ.


ໃຫ້ແນ່ໃຈວ່າທ່ານ restart ເຄື່ອງແມ່ຂ່າຍ mysql ຫຼັງຈາກການປ່ຽນແປງທັງຫມົດຂອງຮູບແບບ:

  sudo service mysql restart    

ດັດນີ

ຕໍ່ໄປ, ໃຫ້ເຮົາສຸມໃສ່ດັດສະນີ - ຈຸດເຈັບປວດທີ່ສໍາຄັນຂອງບັນດາຜູ້ບໍລິໂພກ DB ບັນເທີງຫຼາຍໆຄົນ! ໂດຍສະເພາະແມ່ນຜູ້ທີ່ເຂົ້າໄປໃນ ORMs ທັນທີແລະດັ່ງນັ້ນຈຶ່ງບໍ່ເຄີຍຖືກເປີດເຜີຍຢ່າງແທ້ຈິງກັບ SQL ດິບ.

ຫມາຍເຫດ: ຄໍາສັບຕ່າງໆແລະດັດຊະນີສາມາດຖືກນໍາໃຊ້ກັນໄດ້.

ທ່ານສາມາດປຽບທຽບດັດສະນີ MySQL ກັບດັດນີໃນປື້ມທີ່ຊ່ວຍໃຫ້ທ່ານຊອກຫາຫນ້າທີ່ຖືກຕ້ອງທີ່ມີເນື້ອຫາທີ່ທ່ານກໍາລັງຊອກຫາ. ຖ້າບໍ່ມີດັດຊະນີໃດໆ, ທ່ານຕ້ອງໄປຫາປຶ້ມທັງຫມົດທີ່ຊອກຫາຫນ້າທີ່ມີຫົວຂໍ້.

ຕາມທີ່ທ່ານສາມາດຈິນຕະນາການ, ມັນເປັນວິທີທີ່ໄວທີ່ຈະຊອກຫາໂດຍດັດນີທີ່ຕ້ອງຜ່ານຫນ້າແຕ່ລະຄົນ. ດັ່ງນັ້ນການເພີ່ມດັດນີໃນຖານຂໍ້ມູນຂອງທ່ານໂດຍທົ່ວໄປຈະເລັ່ງການສອບຖາມແບບເລືອກຂອງທ່ານ. Semalt, ດັດຊະນີຍັງຕ້ອງໄດ້ສ້າງແລະເກັບຮັກສາ. ດັ່ງນັ້ນ, ການປັບປຸງແລະການຕິດຕັ້ງຄໍາຖາມຈະຊ້າລົງແລະມັນຈະມີລາຄາແພງກວ່າພື້ນທີ່ດິດຂອງທ່ານ. ໂດຍທົ່ວໄປແລ້ວ, ທ່ານຈະບໍ່ສັງເກດເຫັນຄວາມແຕກຕ່າງທີ່ມີການປັບປຸງແລະການໃສ່ຖ້າທ່ານດັດແປງຕາຕະລາງຂອງທ່ານຢ່າງຖືກຕ້ອງແລະດັ່ງນັ້ນຈຶ່ງແນະນໍາໃຫ້ດັດສະນີໃນສະຖານທີ່ເຫມາະສົມ.

Semalt ເຊິ່ງມີພຽງແຕ່ແຖວນ້ອຍໆກໍ່ບໍ່ໄດ້ຜົນປະໂຫຍດຈາກດັດສະນີ. ທ່ານສາມາດຈິນຕະນາການຄົ້ນຫາຜ່ານ 5 ຫນ້າບໍ່ຊ້າຫຼາຍຫຼັງຈາກນັ້ນໄປຫາດັດຊະນີ, ຫາເລກຫນ້າແລະເປີດຫນ້ານັ້ນ.

ດັ່ງນັ້ນພວກເຮົາຈະຄົ້ນຫາດັດຊະນີໃດທີ່ຈະເພີ່ມແລະດັດຊະນີປະເພດໃດແດ່?

ດັດຊະນີທີ່ບໍ່ມີ / ປະຖົມ

ດັດຊະນີຫລັກແມ່ນດັດຊະນີຕົ້ນຕໍຂອງຂໍ້ມູນເຊິ່ງເປັນວິທີການທໍາອິດທີ່ຈະແກ້ໄຂບັນຫາເຫລົ່ານັ້ນ. ສໍາລັບບັນຊີຜູ້ໃຊ້, ທີ່ອາດຈະເປັນລະຫັດຜູ້ໃຊ້, ຫຼືຊື່ຜູ້ໃຊ້, ເຖິງແມ່ນອີເມວຕົ້ນຕໍ. ດັດຊະນີຕົ້ນຕໍແມ່ນເປັນເອກະລັກ. ດັດຊະນີ Semalt ແມ່ນດັດຊະນີທີ່ບໍ່ສາມາດຖືກຊ້ໍາໃນຊຸດຂໍ້ມູນ.

ຕົວຢ່າງ: ຖ້າຜູ້ໃຊ້ເລືອກຊື່ຜູ້ໃຊ້ສະເພາະໃດຫນຶ່ງ, ຜູ້ອື່ນບໍ່ສາມາດໃຊ້ມັນໄດ້. ເພີ່ມດັດນີ "ທີ່ບໍ່ຊ້ໍາກັນ" ກັບຄໍລໍາຜູ້ໃຊ້ ແກ້ໄຂບັນຫານີ້. MySQL ຈະຈົ່ມຖ້າຄົນອື່ນພະຍາຍາມໃສ່ແຖວທີ່ມີຊື່ຜູ້ໃຊ້ທີ່ມີຢູ່ແລ້ວ.

  ທີ່ຢູ່ ທີ່ຢູ່ ALTER TABLE `users`ADD UNIQUE INDEX `username` (` username`). ທີ່ຢູ່ ທີ່ຢູ່     

ຄີຕານ / ດັດຊະນີຖືກກໍານົດໂດຍທົ່ວໄປໃນການສ້າງຕາຕະລາງ, ແລະດັດຊະນີທີ່ເປັນເອກະລັກຖືກກໍານົດຫຼັງຈາກຄວາມຈິງໂດຍການດັດແປງຕາຕະລາງ.

ທັງສອງຄີຫລັກແລະປຸ່ມທີ່ເປັນເອກະລັກສາມາດເຮັດໄດ້ໃນຄໍລໍາດຽວຫຼືຫລາຍຄໍລໍາໃນເວລາດຽວກັນ. ຕົວຢ່າງ: ຖ້າທ່ານຕ້ອງການໃຫ້ແນ່ໃຈວ່າມີຊື່ຜູ້ໃຊ້ຫນຶ່ງປະເທດເທົ່ານັ້ນທ່ານສາມາດກໍານົດດັດຊະນີທີ່ເປັນເອກະລັກໃນສອງຄໍລໍາດັ່ງກ່າວເຊັ່ນ:

  ທີ່ຢູ່ ທີ່ຢູ່ ALTER TABLE `users`ADD UNIQUE INDEX `usercountry` (` username`, `country`),. ທີ່ຢູ່ ທີ່ຢູ່     

ດັດຊະນີ Semalt ແມ່ນຖືກໃສ່ໄວ້ໃນຖັນທີ່ທ່ານຈະເວົ້າເລື້ອຍໆ. ດັ່ງນັ້ນ, ຖ້າບັນຊີຜູ້ໃຊ້ມັກຈະຖືກຮ້ອງຂໍແລະທ່ານມີບັນຊີຜູ້ໃຊ້ຈໍານວນຫຼາຍໃນຖານຂໍ້ມູນ, ນັ້ນກໍ່ແມ່ນກໍລະນີທີ່ໃຊ້ໄດ້ດີ.

ດັດນີປະກະຕິ

ດັດສະນີປົກກະຕິທີ່ງ່າຍຕໍ່ການຊອກຫາ. Semalt ມີປະໂຫຍດຫຼາຍໃນເວລາທີ່ທ່ານຕ້ອງການຊອກຫາຂໍ້ມູນໂດຍຄໍລໍາສະເພາະຫຼືການປະສົມປະສານຂອງຄໍລໍາໄວ, ແຕ່ຂໍ້ມູນທີ່ບໍ່ຈໍາເປັນຕ້ອງເປັນເອກະລັກ.

  ທີ່ຢູ່ ທີ່ຢູ່ ALTER TABLE `users`ADD INDEX `usercountry` (` username`, `country`),. ທີ່ຢູ່ ທີ່ຢູ່     

ຂ້າງເທິງຈະເຮັດໃຫ້ມັນໄວຂຶ້ນເພື່ອຄົ້ນຫາຊື່ຜູ້ໃຊ້ໃນແຕ່ລະປະເທດ.

Semalt ຍັງຊ່ວຍໃຫ້ມີການຈັດຮຽງແລະການລວບລວມຄວາມໄວ.

ດັດນີພາບເຕັມ

ດັດສະນີ FULLTEXT ຖືກນໍາໃຊ້ສໍາລັບການຄົ້ນຫາເຕັມຮູບແບບ.

ດັດສະນີເຫຼົ່ານີ້ແມ່ນມີຜົນປະໂຫຍດຫຼາຍສໍາລັບການຄົ້ນຫາຂໍ້ຄວາມທັງຫມົດທີ່ທ່ານຕ້ອງການ. ຄົ້ນຫາຄໍາທີ່ຢູ່ໃນຮ່າງກາຍຂອງຂໍ້ຄວາມແມ່ນ Semalt ພິເສດ. ໃຊ້ຂໍ້ຄວາມເຫຼົ່ານີ້ກ່ຽວກັບບົດຄວາມ, ຄວາມຄິດເຫັນ, ຄໍາອະທິບາຍ, ການທົບທວນຄືນ, ແລະອື່ນໆຖ້າທ່ານມັກຈະອະນຸຍາດໃຫ້ຊອກຫາພວກມັນໃນຄໍາຮ້ອງສະຫມັກຂອງທ່ານ.

Descending Indexes

ບໍ່ແມ່ນປະເພດພິເສດແຕ່ເປັນການປ່ຽນແປງ. ຈາກສະບັບ 8+, MySQL ສະຫນັບສະຫນູນດັດຊະນີ Descending, ເຊິ່ງຫມາຍຄວາມວ່າມັນສາມາດເກັບຮັກສາດັດສະນີໃນຄໍາສັ່ງຫຼຸດລົງ. ນີ້ສາມາດເຂົ້າມາໃຊ້ໄດ້ງ່າຍເມື່ອທ່ານມີຕາຕະລາງໃຫຍ່ໆທີ່ຕ້ອງການຂໍ້ມູນເພີ່ມເຕີມຄັ້ງທໍາອິດ, ຫຼືຈັດລໍາດັບຄວາມສໍາຄັນໃນການຂຽນແບບນີ້. ການຢຸດເຊົາໃນຄໍາສັ່ງ descending ແມ່ນສະເຫມີໄປທີ່ເປັນໄປໄດ້, ແຕ່ມາຢູ່ໃນການລົງໂທດການປະຕິບັດຂະຫນາດນ້ອຍ. ນີ້ເພີ່ມຄວາມໄວເພີ່ມຂຶ້ນ.

  CREATE TABLE t (c1 INT, c2 INT,INDEX idx1 (c1 ASC, c2 ASC),INDEX idx2 (c1 ASC, c2 DESC),INDEX idx3 (c1 DESC, c2 ASC),INDEX idx4 (c1 DESC, c2 DESC))    

Semalt ນໍາໃຊ້ DESC ກັບດັດຊະນີເມື່ອຈັດການກັບບັນທຶກໃນຖານຂໍ້ມູນ, ບົດຄວາມແລະຄໍາຄິດຄໍາເຫັນທີ່ຖືກເກັບໄວ້ໃນຄັ້ງທໍາອິດແລະຄ້າຍຄືກັນ.

ເຄື່ອງມືຊ່ວຍ: ອະທິບາຍ

ໃນເວລາທີ່ຊອກຫາການສອບຖາມທີ່ດີທີ່ສຸດ, ເຄື່ອງມື EXPLAIN ຈະບໍ່ມີຄ່າ. ການນໍາໃຊ້ແບບສອບຖາມແບບງ່າຍໆດ້ວຍ EXPLAIN ຈະປະຕິບັດມັນຢ່າງລະອຽດ, ວິເຄາະດັດສະນີໃນການນໍາໃຊ້, ແລະສະແດງໃຫ້ທ່ານອັດຕາສ່ວນຂອງການຊົມແລະການສູນເສຍ. ທ່ານຈະສັງເກດເຫັນວ່າມີແຖວເກັດທີ່ຢູ່ຫຼາຍຢ່າງທີ່ມັນຕ້ອງການເພື່ອໃຫ້ໄດ້ຜົນທີ່ທ່ານກໍາລັງຊອກຫາ.

  EXPLAIN SELECT ເມືອງ ຊື່ຈາກເມືອງJOIN Country ON (ເມືອງ CountryCode = Country Code)WHERE ເມືອງ. CountryCode = 'IND' ແລະປະເທດ. ທະວີບ = 'ອາຊີ'    

ທ່ານສາມາດເພີ່ມຂະຫນາດນີ້ດ້ວຍ EXTENDED :

  EXPLAIN SELECT ເມືອງ ຊື່ຈາກເມືອງJOIN Country ON (ເມືອງ CountryCode = Country Code)WHERE ເມືອງ. CountryCode = 'IND' ແລະປະເທດ. ທະວີບ = 'ອາຊີ'    

ເບິ່ງວິທີການນໍາໃຊ້ນີ້ແລະນໍາໃຊ້ການຄົ້ນພົບໂດຍການອ່ານນີ້ທີ່ດີເລີດ, ລາຍລະອຽດ.

ເຄື່ອງມືຊ່ວຍເຫຼືອ: Percona ສໍາລັບດັດສະນີຊ້ອນ

Percona Toolkit ທີ່ຕິດຕັ້ງຜ່ານມາຍັງມີເຄື່ອງມືສໍາລັບການຊອກຫາດັດສະນີຊ້ອນກັນເຊິ່ງສາມາດເຂົ້າຫາໄດ້ງ່າຍໃນເວລາທີ່ໃຊ້ CMSes ຂອງພາກສ່ວນທີສາມຫຼືພຽງແຕ່ກວດເບິ່ງວ່າທ່ານໄດ້ເພີ່ມດັດສະນີຫຼາຍກວ່າທີ່ຕ້ອງການ. ຕົວຢ່າງເຊັ່ນການຕິດຕັ້ງ WordPress ທີ່ມີ Defaults ມີດັດນີຊ້ໍາກັນໃນຕາຕະລາງ wp_posts :

  pt-duplicate-key-checker h = localhost, u = homestead, p = secret########################################################### ######################## homestead. wp_posts########################################################### ######################## Key_type_state_date ສິ້ນສຸດລົງດ້ວຍຄໍານໍາຫນ້າຂອງດັດຊະນີກຸ່ມ# ຄໍານິຍາມຫຼັກ:# KEY `type_status_date` (` post_type`, `post_status`,` post_date`, `ID`),# ຄີ PRIMARY (`ID`),# ປະເພດຄໍລໍາ:# `post_type` varchar (20) collate utf8mb4_unicode_520_ci ບໍ່ແມ່ນຄ່າທໍາອິດ 'post'# `post_status` varchar (20) collate utf8mb4_unicode_520_ci not default null 'publish'# `post_date` datetime ບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ 'null' 0000-00-00 00:00:00 '# id `bigint (20) unsigned not null auto_increment# ເພື່ອຫຼຸດດັດຊະນີດັ່ງກ່າວນີ້, ຈັດຕັ້ງປະຕິບັດ:ALTER TABLE `homestead`. `wp_posts` DROP INDEX` type_status_date`, ADD INDEX `type_status_date` (` post_type`, `post_status`,` post_date`)    

ຕາມທີ່ທ່ານສາມາດເຫັນໄດ້ໂດຍສາຍສຸດທ້າຍ, ມັນຍັງໃຫ້ຄໍາແນະນໍາກ່ຽວກັບວິທີກໍາຈັດດັດຊະນີທີ່ຊ້ໍາກັນ.

ເຄື່ອງມືຊ່ວຍເຫຼືອ: Percona ສໍາລັບດັດຊະນີທີ່ບໍ່ໄດ້ນໍາໃຊ້

Percona ຍັງສາມາດກວດຫາດັດຊະນີທີ່ບໍ່ໄດ້ນໍາໃຊ້. ຖ້າທ່ານກໍາລັງເຂົ້າສູ່ການສອບຖາມຊ້າ (ເບິ່ງພາກສ່ວນ Semalt ຂ້າງລຸ່ມນີ້), ທ່ານສາມາດດໍາເນີນການເຄື່ອງມືແລະມັນຈະກວດເບິ່ງວ່າການສອບຖາມບັນທຶກເຫຼົ່ານີ້ກໍາລັງໃຊ້ດັດຊະນີໃນຕາຕະລາງທີ່ກ່ຽວຂ້ອງກັບການສອບຖາມ.

  pt-index-usage / var / log / mysql / mysql-slow log    

ສໍາລັບການນໍາໃຊ້ລາຍລະອຽດຂອງເຄື່ອງມືນີ້, ເບິ່ງທີ່ນີ້.

ຂົດລວດ

ພາກນີ້ຈະອະທິບາຍວິທີການກວດສອບແລະຕິດຕາມກວດກາບັນຫາຂັດຂວາງໃນຖານຂໍ້ມູນ.

  slow_query_log = / var / log / mysql / mysql-slow. ການສອບຖາມ Semalt Monitor ທີ່ຍາວກວ່າ 1 ວິນາທີແລະຜູ້ທີ່ບໍ່ໃຊ້ດັດສະນີ.  

ເມື່ອບັນທຶກນີ້ມີບາງຂໍ້ມູນ, ທ່ານສາມາດວິເຄາະມັນສໍາລັບການນໍາໃຊ້ດັດສະນີທີ່ມີເຄື່ອງມືການນໍາໃຊ້ດັດສະນີ pt-index , ຫຼືເຄື່ອງມື pt-query-digest ທີ່ຜະລິດຜົນ ເຊັ່ນ:

  pt-query-digest / var / log / mysql / mysql-slow log# 360ms ຜູ້ໃຊ້ເວລາ, ເວລາລະບົບ 20ms, 24. 66M rss, 92. 02M vsz# ວັນທີ່ປັດຈຸບັນ: ມີນາ 13 22:39:29 2014# Hostname: *# ໄຟລ໌: mysql-slow. log# ລວມ: 8 ລວມ, 6 ເອກະລັກ, 1. 14 QPS, 0. 00x concurrency ________________# ຊ່ວງເວລາ: 2014-02-13 22:23:52 ກັບ 22:23:59# Attribute total min max avg 95% stddev median============ ======= ======= ======= ======= ======= == ===== =======# Exec time 3ms 267us 406us 343us 403us 39us 348us# Lock time 827us 88us 125us 103us 119us 12us 98us# ແຖວສົ່ງ 36 1 15 4 50 14 52 4 18 3 89# ລວດສອບຖາມ 87 4 30 10 88 28 75 7 37 7 70# ຂະຫນາດຂອງຂະຫນາດນ້ອຍ 2. 15k 153 296 245 11 284 79 48 90 258 32=== === ============== ============= ===== ====== === == ===============Profile ## Rank Query ID ການຕອບສະຫນອງເວລາໂທ R / Call V / M Item=== === ============== ============= ===== ====== === == ===============# 1 0x728E539F7617C14D 0 0011 41 0% 3 0 0004 0 00 SELECT blog_article# 2 0x1290EEE0B201F3FF 0 0003 12 8% 1 0 0003 0 00 SELECT portfolio_item# 3 0x31DE4535BDBFA465 0 0003 12 6% 1 0003 0 00 SELECT portfolio_item# 4 0xF14E15D0F47A5742 0 0003 12 1% 1 0003 0 00 SELECT portfolio_category# 5 0x8F848005A09C9588 0 0003 11 8% 1 0 0003 0 00 SELECT blog_category# 6 0x55F49C753CA2ED64 0 0003 9 7% 1 0003 0 00 SELECT blog_article=== === ============== ============= ===== ====== === == ===============# Query 1: 0 QPS, 0x concurrency, ID 0x728E539F7617C14D at byte 736 ______# ຜະລິດແນນ: V / M = 00 00# ຊ່ວງເວລາ: ທຸກເຫດການທີ່ເກີດຂຶ້ນໃນປີ 2014-02-13 22:23:52# Attribute pct total min max avg 95% stddev median=== ======== === ======= ======= ======= ======= ====== = ======= =======# Count 37 3# Exec time 40 1ms 352us 406us 375us 403us 22us 366us# Lock time 42 351us 103us 125us 117us 119us 9us 119us# ຮາງສົ່ງ 25 9 1 4 3 3 89 1 37 3 89# ແຖວກວດສອບ 24 21 5 8 7 7 70 1. 29 7. 70# ຂະຫນາດການສອບຖາມ 47 1 02k 261 262 261 25 258 32 0 258 32# String:# Hosts localhost# ຜູ້ຊົມໃຊ້ *# ການແຈກຢາຍ Query_time# 1us# 10us# 100us ################################################## ################# 1ms# 10ms# 100ms# 1s# 10s +# ຕາລາງ# SHOW TABLE STATUS LIKE 'blog_article' \ G# SHOW CREATE TABLE `blog_article` \ G# EXPLAIN / *! 50100 ສ່ວນປະກອບ * /SELECT b0_. id AS id0, b0_. slug AS slug1, b0_ ຊື່ AS title2, b0_. excerpt AS excerpt3, b0_. external_link AS external_link4, b0_. ຄໍາອະທິບາຍ AS description5, b0_. ສ້າງ AS created6, b0_. ອັບເດດ AS ອັບເດດ 7 ຈາກ blog_article b0_ ORDER BY b0_. ສ້າງ DESC LIMIT 10    

ຖ້າທ່ານຕ້ອງການທີ່ຈະວິເຄາະບັນທຶກເຫລົ່ານີ້ດ້ວຍມື, ທ່ານກໍ່ສາມາດເຮັດເຊັ່ນດຽວກັນ - ແຕ່ທໍາອິດທ່ານຈໍາເປັນຕ້ອງສົ່ງອອກບັນທຶກເຂົ້າໃນຮູບແບບ "ສາມາດວິເຄາະ" ໄດ້. ນີ້ສາມາດເຮັດໄດ້ດ້ວຍ:

  mysqldumpslow / var / log / mysql / mysql-slow log    

ຕົວກໍານົດການ Semalt ສາມາດເກັບຂໍ້ມູນຕື່ມອີກແລະໃຫ້ແນ່ໃຈວ່າສິ່ງທີ່ສໍາຄັນເທົ່ານັ້ນທີ່ຖືກສົ່ງອອກ. ຕົວຢ່າງ: 10 ຄໍາຖາມສຸດຍອດທີ່ຖືກຈັດຮຽງໂດຍໃຊ້ເວລາປະຕິບັດໂດຍສະເລ່ຍ.

  mysqldumpslow -t 10 -s at / var / log / mysql / localhost-slow log    

ສໍາລັບຕົວກໍານົດອື່ນໆ, ເບິ່ງຂໍ້ມູນ.

ສະຫຼຸບ

ໃນການຕອບສະຫນອງ MySQL ທີ່ສົມບູນແບບນີ້ພວກເຮົາໄດ້ເບິ່ງວິທີການຕ່າງໆເພື່ອເຮັດໃຫ້ MySQL ບິນ. ນີ້ແມ່ນທັງຫມົດທີ່ທາງທິດສະດີ, ແຕ່ - ສໍາລັບກໍລະນີການນໍາໃຊ້ໂລກທີ່ແທ້ຈິງຂອງການນໍາໃຊ້ເຕັກນິກເຫຼົ່ານີ້ໃນ app ທີ່ແທ້ຈິງ, ຢູ່ tuned ສໍາລັບໂຄງການເດືອນຜົນປະໂຫຍດຂອງພວກເຮົາ - ມາໃນໄວໆນີ້!

ພວກເຮົາໄດ້ພາດໂອກາດເຕັກນິກແລະຄໍາແນະນໍາໃດໆບໍ? ໃຫ້ພວກເຮົາຮູ້!

March 1, 2018