คำถามติดแท็ก mysql

MySQL ทุกรุ่น (ไม่ใช่ Microsoft SQL Server) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น mysql-5.7 หากเกี่ยวข้องกับคำถาม

2
วิธีในการป้องกันคิวรีไม่ให้รอการล็อกระดับตาราง
เราพบปัญหาหลังจากย้ายฐานข้อมูลของลูกค้าไปยังเซิร์ฟเวอร์เพิ่มเติม สิ่งนี้ควรมีผลในเชิงบวกต่อประสิทธิภาพของไซต์ แต่มีปัญหากับการล็อคตารางใน MyISAM (ฉันเคยได้ยินการใช้ InnoDB แทน MyISAM แต่เราไม่สามารถเปลี่ยนเครื่องยนต์ได้ในอนาคตอันใกล้) เราสามารถตรวจสอบมันไปยังแบบสอบถามการปรับปรุงซึ่งจะดำเนินการเมื่อผู้ดูแลเปิดใช้งานความคิดเห็นในบทความ นี่คือกระบวนการ: มีการประมวลผลการอัพเดตเคียวรี SET status = 1 WHERE id = 5(ตั้งค่าดัชนีแล้ว) ไฟล์แคชของหน้าจะถูกลบ เมื่อมาถึงจุดนี้ทั้งหน้าจะช้า ฐานข้อมูลไม่ว่างเป็นเวลาหลายนาที ฉันเรียก processlist ไม่กี่ครั้งและเห็นประมาณ 60 รายการที่แตกต่างกันการเลือกคำสั่งซึ่งทุกคนในรัฐรอล็อคระดับตาราง 1. ฉันไม่ได้ยกเลิกการยืนยันว่าเหตุใดการอัปเดตนี้ในตารางarticle_commentsอาจส่งผลกระทบต่อข้อความเลือกสำหรับตารางarticleเพื่อรอการล็อกระดับตาราง ในรายการกระบวนการแบบสอบถามที่รอเกือบทั้งหมดมาจากตารางนี้ ฉันได้อ่านเกี่ยวกับความจริงที่ว่าการปรับปรุง / การแทรกนั้นเป็นที่ต้องการของการเลือกและสิ่งนี้อาจทำให้เกิดปัญหาดังกล่าวได้ แต่ตัวบทความในตารางไม่ได้รับการอัพเดตเมื่อความคิดเห็นเปิดใช้งานดังนั้นการเลือกไม่ควรรอ ฉันผิดพลาดหรือไม่ 2. มีอะไรอีกบ้างที่นอกเหนือจากการเปลี่ยนเป็น InnoDB เพื่อป้องกันพฤติกรรมนี้หรืออย่างน้อยก็เพื่อให้ได้สมดุลที่ดีขึ้น? ฉันหงุดหงิดมากเกี่ยวกับความจริงที่ว่าปัญหานี้ไม่ปรากฏขึ้นก่อนที่จะย้ายฐานข้อมูลไปยังเซิร์ฟเวอร์ใหม่ ฉันเดาว่ามีการกำหนดค่าผิดพลาดอยู่บ้าง แต่ฉันไม่รู้วิธีระบุตัวตน

1
ทำไม full-text-search จึงส่งกลับแถวน้อยกว่า LIKE
ฉันไม่ได้รับการค้นหาแบบข้อความเต็มตามที่ฉันต้องการและฉันไม่เข้าใจความแตกต่างในรายการผลลัพธ์ คำสั่งตัวอย่าง: SELECT `meldungstext` FROM `artikel` WHERE `meldungstext` LIKE '%punkt%' ผลตอบแทน 92 แถว ฉันได้รับแถวที่มีการจับคู่เช่น "Punkten", "Zwei-Punkte-Vorsprung" และ "Treffpunkt" ในคอลัมน์ meldungstext ฉันตั้งค่าดัชนีข้อความเต็มในคอลัมน์ "meldungstext" และลองทำสิ่งนี้: SELECT `meldungstext` FROM `artikel` WHERE MATCH (`meldungstext`) AGAINST ('*punkt*') ผลตอบแทน 8 แถวเท่านั้น ฉันได้รับแถวที่มีการจับคู่กับ "Punkt" เท่านั้นหรือคำที่ฉันคิดว่าเป็น "Punkt" เช่นเดียวกับใน "i-Punkt" ฉันลองโหมดบูลีน: SELECT `meldungstext` FROM `artikel` WHERE MATCH (`meldungstext`) AGAINST …

4
วิธีการเปลี่ยน MySQL slave ก่อนหน้าให้เป็น master และลบข้อมูลสถานะ slave?
ฉันมีต้นแบบ -> การกำหนดค่าทาสที่ต้นแบบล้มเหลว ฉันสามารถรีเซ็ตทาสเก่าให้เป็นเจ้านายและเจ้านายเก่าเป็นทาสจากมันได้ ละเอียด. สิ่งที่ฉันไม่สามารถทำได้คือการลบข้อมูลหลักในทาสเก่าซึ่งตอนนี้เป็นปรมาจารย์ใหม่ ฉันเห็น: mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Master_Host: 10.1.2.101 Master_User: replicationSlave Master_Port: 3306 ... Slave_IO_Running: No Slave_SQL_Running: No ฉันอ่านเอกสาร MySQLจำนวนมากแล้วแต่ฉันยังไม่พบวิธีล้างข้อมูลทาสจากปรมาจารย์ใหม่ ฉันได้พยายาม: RESET SLAVEซึ่งดูเหมือนจะไม่ล้างการตั้งค่าเหล่านั้น [[จริงๆแล้วมันลบmaster.infoไฟล์ แต่ไม่ใช่การตั้งค่าหน่วยความจำ ดูด้านล่าง]] CHANGE MASTER TO MASTER_HOST='' ซึ่งเพิ่งถ่มน้ำลายกับข้อผิดพลาดเนื่องจากเพิ่งเลิกใช้ไปแล้ว การตรวจสอบmy.cnfที่ไม่มีข้อมูลหลักเนื่องจากมีการเพิ่มโดยทางโปรแกรม RESET MASTERเพราะเอกสาร MySQL บางตัวแนะนำ ที่รีเซ็ตบันทึกถังขยะเท่านั้น เจาะเข้าไปในตาราง MySQL ภายในเพื่อดูว่าฉันสามารถหาเขตข้อมูลเพื่อล้างได้หรือไม่ …

2
ฉันจะทราบได้อย่างไรว่ามีการใช้ดัชนีเพื่อจัดเรียงใน MySQL หรือไม่
ฉันมีแบบสอบถามที่มีส่วนคำสั่ง ORDER BY ซึ่งใช้คอลัมน์ซึ่งเป็นคอลัมน์สุดท้ายของดัชนีที่ใช้ในส่วนคำสั่ง WHERE ซึ่งเป็นรูปแบบหลัก: SELECT cols FROM tables WHERE col_1 = x AND col_2 = y AND col_3 = z ORDER BY col_4 และดัชนีจะถูกสร้างในคอลัมน์ (col_1, col_2, col_3, col_4) ตามลำดับ เมื่อฉันโปรไฟล์แบบสอบถามกว่า 99% ของเวลาที่ใช้ในสถานะ "ผลการเรียงลำดับ" col_4 เป็นคอลัมน์การประทับเวลาหากสร้างความแตกต่าง ฉันเข้าใจว่า ORDER BY สามารถใช้ดัชนีภายใต้สถานการณ์บางอย่างเท่านั้น แต่ฉันยังคงประหลาดใจเล็กน้อยเมื่อต้องใช้เครื่องมือเพิ่มประสิทธิภาพ
10 mysql  index  sorting 

2
ฉันสามารถมีตารางหนึ่งเป็น "นามแฝง" หรือ "symlink" ไปยังตารางอื่นได้หรือไม่
ฉันมีสองตารางที่มีโครงสร้างเดียวกัน A และ B มีการเขียนแอปพลิเคชันบางอย่างเพื่อให้มันเขียนข้อมูลเดียวกันไปยังตารางทั้งสองเสมอ หลังจากการสนทนากับเพื่อนร่วมงานเกี่ยวกับศักยภาพในการประหยัดพื้นที่ไดรฟ์ฉันสงสัยว่า mysql หรือ postgresql มีความสามารถในการสร้างบนโต๊ะเป็น "นามแฝง" หรือ "symlink" ของอีกคน ฉันต้องการให้พฤติกรรมคล้ายกับ symlink ของไฟล์อ่อน โดยที่การอ่านจาก symlink เองหรือเป้าหมายจะให้ผลลัพธ์เดียวกันและการเขียนไปที่ทั้งสองจะเป็นการอัพเดตเป้าหมาย
10 mysql  postgresql 

3
วิธีการใช้การหน่วงเวลาการแทรกด้วยเอ็นจิน InnoDB และใช้การเชื่อมต่อน้อยลงสำหรับการแทรกคำสั่ง
ฉันกำลังทำงานกับแอปพลิเคชันที่เกี่ยวข้องกับการเขียนฐานข้อมูลจำนวนมากมีการแทรกประมาณ 70% และการอ่าน 30% อัตราส่วนนี้จะรวมการอัปเดตซึ่งฉันคิดว่าเป็นหนึ่งการอ่านและการเขียนหนึ่งครั้ง ผ่านคำสั่งแทรกไคลเอนต์หลายคนแทรกข้อมูลในฐานข้อมูลผ่านคำสั่งแทรกด้านล่าง: $mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)"); คำถามคือฉันควรใช้insert_delayหรือใช้กลไกmysqli_multi_queryเพราะคำสั่งแทรกใช้ ~ 100% cpu บนเซิร์ฟเวอร์ ฉันใช้เอ็นจิ้น InnoDB บนฐานข้อมูลของฉันดังนั้นการแทรกที่ล่าช้าจึงเป็นไปไม่ได้ การแทรกบนเซิร์ฟเวอร์คือ ~ 36k / ชม. และอ่านได้ 99.89% นอกจากนี้ฉันกำลังใช้คำสั่งเลือกที่มีการดึงข้อมูลเจ็ดครั้งในแบบสอบถามเดียวแบบสอบถามนี้ใช้เวลา 150 วินาทีบนเซิร์ฟเวอร์เพื่อดำเนินการ ฉันสามารถใช้เทคนิคหรือกลไกชนิดใดสำหรับงานนี้ หน่วยความจำเซิร์ฟเวอร์ของฉันคือ 2 gb ฉันควรขยายหน่วยความจำหรือไม่ ไปดูปัญหานี้ข้อเสนอแนะใด ๆ จะขอบคุณฉัน โครงสร้างของตาราง: +-----------------+--------------+------+-----+-------------------+----------------+ | Field | …

2
MySQL ล็อคขณะสร้างตารางตามที่เลือก
ฉันกำลังเรียกใช้แบบสอบถาม (จำลอง) ต่อไปนี้ CREATE TABLE large_temp_table AS SELECT a.*, b.*, c.* FROM a LEFT JOIN b ON a.foo = b.foo LEFT JOIN c ON a.bar = c.bar สมมติว่าแบบสอบถามใช้เวลา 10 นาทีในการเรียกใช้ การพยายามอัปเดตค่าในตาราง a, b หรือ c ในขณะที่มันกำลังทำงานอยู่จะรอให้คิวรีด้านบนทำงานให้เสร็จก่อน ฉันต้องการหลีกเลี่ยงการล็อคนี้ (ความสอดคล้องของข้อมูลไม่เป็นที่สนใจ) ฉันจะบรรลุสิ่งนั้นได้อย่างไร การใช้: MySQL 5.1.41 และตาราง InnoDB ps ชุดแยกธุรกรรมระดับการอ่านไม่ได้รับอนุญาต; ไม่มีการเปลี่ยนแปลงในพฤติกรรม อัปเดต ในขณะที่กำลังดำเนินการค้นหาผลลัพธ์ของ SHOW …
10 mysql  locking  ctas 

2
การใช้หลายคอร์สำหรับเคียวรี MySQL เดี่ยวบน Debian
ฉันใช้เซิร์ฟเวอร์ MySQL สำหรับการทดสอบบน VM (VMWare) กับ Debian ในฐานะแขกของระบบปฏิบัติการ แขกมีคอร์ CPU ที่จำลองสี่แกนดังนั้นฉันจึงตั้งค่า thread_concurrency เป็นสี่ ฉันกำลังทำร่วมราคาแพงบนโต๊ะขนาดใหญ่ซึ่งอาจใช้เวลาหลายนาที แต่ฉันเห็นในระบบปฏิบัติการของแขกว่ามีเพียงหนึ่งคอร์เท่านั้นที่ใช้ในแต่ละครั้ง สิ่งนี้เกิดขึ้นโดยไม่คำนึงถึงเอ็นจิ้นการจัดเก็บที่ใช้สำหรับตารางที่เกี่ยวข้อง (ทดสอบกับ MyISAM และ InnoDB) นอกจากนี้ฐานข้อมูลทั้งหมดดูเหมือนจะถูกบล็อกเมื่อทำการสอบถามขนาดใหญ่เหล่านี้ฉันไม่สามารถทำแบบสอบถามเพิ่มเติมใด ๆ ในแบบคู่ขนาน แสดงว่า htop แปลก ๆ ที่แกนกลางที่ใช้สำหรับคิวรีนั้นเปลี่ยนไปในระหว่างรันไทม์ของคิวรี! ทำไมสิ่งนี้ถึงเกิดขึ้น นี่คือรายการที่เกี่ยวข้องจากSHOW FULL PROCESSLIST;(ไม่มีคำสั่งอื่น ๆ ): | 153 | root | localhost | pulse_stocks | Query | 50 | Copying to tmp …

3
ฉันจะหาฐานข้อมูลตัวอย่างสำหรับ MySQL, SQL Server และ Oracle ได้จากที่ใด
ฉันต้องการทดลองกับระบบการจัดการฐานข้อมูลขนาดใหญ่ 3 ระบบ เพื่อจุดประสงค์นี้มันจะเจ๋งที่มีฐานข้อมูลเดียวกัน (ตารางเดียวกันและอื่น ๆ ) สำหรับแต่ละฐานข้อมูล ฉันจะหาสคริปต์ sql ที่สร้างฐานข้อมูลทดสอบที่เหมือนกันสำหรับ MySQL, MSSQL และ Oracle ได้อย่างไร

3
การจัดเก็บเวลาด้วยมิลลิวินาทีในฐานข้อมูล
เพียงคำถามสั้น ๆ เกี่ยวกับการจัดเก็บ "เวลา" ในฐานข้อมูล ฉันบันทึกเวลาที่ผู้ใช้ทำงานซึ่งอยู่ในรูปแบบ 00: 00: 00: 00 (ชั่วโมง, นาที, วินาที, มิลลิวินาที) เดิมทีฉันจะเก็บมันไว้TIMEแต่แล้วฉันก็รู้ว่า MySQL ไม่รองรับมิลลิวินาทีในประเภทนี้ ฉันจะจัดเก็บเวลาจริงที่ถ่ายจากนาฬิกาจับเวลาของผู้ใช้ไม่ใช่เวลาที่พวกเขาวิ่งและสิ้นสุด (นี่จะถูกคำนวณก่อนที่จะถูกแทรก) ประเภทเขตข้อมูลที่ดีที่สุดที่จะใช้คืออะไร ผมคิดว่าอย่างใดอย่างหนึ่งdoubleหรือfloatแต่ผมไม่แน่ใจว่าจะทำงานอย่างไร

1
กู้คืนฐานข้อมูล mysql เดียวบนระบบที่ถูกจำลองแบบ master-slave ที่ไม่ว่าง
กำลังมองหากลยุทธ์หรือเครื่องมือในการจัดการกับการกู้คืนฐานข้อมูลเดียวไปยังจุดในเวลาในระบบจำลองแบบไม่ว่าง ฉันมี 12 ฐานข้อมูลที่ทำงานบนเซิร์ฟเวอร์ MySQL 5.0.77 2 ตัวในการกำหนดค่าแบบจำลองต้นแบบทาส การถ่ายโอนข้อมูลเต็มรูปแบบถูกนำมาใช้เป็นทาสแบบอ่านอย่างเดียวทุกวันและมีการทิ้ง SQL ที่เพิ่มขึ้นพร้อมกับการสำรองข้อมูลเหล่านี้นอกสถานที่และตรวจสอบสถานะการจำลองแบบ แก้ไข: ตารางเป็นส่วนผสมของ InnoDB และ myISAM ดังนั้นจึงไม่มีโซลูชันเฉพาะเครื่องยนต์ เมื่อได้รับความล้มเหลวอย่างสมบูรณ์ของเซิร์ฟเวอร์หลักฉันสามารถทำลายการจำลองแบบและส่งเสริมเซิร์ฟเวอร์ทาสฉันยังมีตัวเลือกในการสร้างเซิร์ฟเวอร์ใหม่และกำหนดค่าจากการสำรองข้อมูล FULL ล้ำหน้าแล้วใช้ส่วนต่างที่เกิดขึ้นจากทาสทุกชั่วโมง อย่างไรก็ตามฉันกังวลว่าจะจัดการกับความล้มเหลวบางส่วนหรือความล้มเหลวของฐานข้อมูลเดียวได้อย่างไร ฉันคิดว่า 2 สถานการณ์ที่ค่อนข้างน่าจะเป็น ฐานข้อมูล 7 (ตัวอย่าง) เกิดความเสียหายยังคงให้บริการคำขอบางอย่างจนกว่าจะมีคนสังเกตว่ามันเสียหรือการแจ้งเตือนจากไฟล์บันทึก ... แบบสอบถามบางอย่างเช่นฐานข้อมูลแบบหล่นตารางวาง "อัปเดตที่ ... " พิมพ์แบบสอบถามแบบบอร์กเป็นฐานข้อมูลเดียวหรือบางส่วนในนั้น ในขณะนี้ฉันมีไฟล์ดัมทั้งหมดเป็นไฟล์ FULL- $ DATE-all-database.sql.gz และดิฟเฟอเรนเชียลที่สามารถนำไปใช้กับการถ่ายโอนข้อมูล FULL ได้เช่น DIFF- $ DATE-all-database.sql.gz ในการกู้คืนฐานข้อมูล 7 ไปยังจุดเวลาจะต้องมี grep ผ่านไฟล์ FULL …

1
ทำไม mysql 5.5 ช้ากว่า 5.1 (linux โดยใช้ mysqlslap)
my.cnf (5.5 และ 5.1 เหมือนกัน): back_log=200 max_connections=512 max_connect_errors=999999 key_buffer=512M max_allowed_packet=8M table_cache=512 sort_buffer=8M read_buffer_size=8M thread_cache=8 thread_concurrency=4 myisam_sort_buffer_size=128M interactive_timeout=28800 wait_timeout=7200 MySQL 5.5: ..mysql5.5/bin/mysqlslap -a --concurrency=10 --number-of-queries 5000 --iterations=5 -S /tmp/mysql_5.5.sock --engine=innodb Benchmark Running for engine innodb Average number of seconds to run all queries: 15.156 seconds Minimum number of seconds to run …

3
จะทดสอบเซิร์ฟเวอร์ SQL ได้อย่างไร? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน3 ปีที่ผ่านมา ฉันได้รับมอบหมายให้ทดสอบเซิร์ฟเวอร์ MSSQL และ MySQL Server ของเรา ฉันต้องการทราบว่ามีเครื่องมือหรือสคริปต์ใดบ้างที่ฉันสามารถใช้กับระบบปัจจุบันของเราและระบบใหม่เพื่อเปรียบเทียบประสิทธิภาพได้หรือไม่ ฉันต้องการวัดอ่าน / เขียนข้อมูลลงดิสก์และประสิทธิภาพของโปรเซสเซอร์ สิ่งอื่นใดที่อาจเป็นประโยชน์ก็ยอดเยี่ยมเช่นกัน ขอบคุณ!

3
วิธีที่ดีที่สุดใช้การค้นหาเพื่อนบ้านที่ใกล้ที่สุดใน mysql
ดังนั้นในระยะสั้น ข้อมูลละติจูดและลองจิจูดควรเป็นประเภทใด ฉันควรเรียกใช้คำสั่ง SQL เพื่อรับร้านอาหารที่ใกล้ที่สุด 100 แห่งแรกหรือไม่ รายละเอียด: ฉันมีบันทึกขนาด 100k biz แต่ละรายการที่มี lattitude และลองจิจูด ฉันเห็นว่า MySQL สนับสนุนชนิดข้อมูลที่เรียกว่า point จริงๆ ฉันควรใช้สิ่งนี้แทนหรือไม่ MySQL รองรับระบบจัดเก็บ KDTree หรือไม่http://en.wikipedia.org/wiki/File:KDTree-animation.gif เป็นการดีที่สุดที่จะใช้ชนิดข้อมูลจุดแทนที่จะเป็นชนิดข้อมูลลอยตัวปกติเพื่อจัดเก็บ latitutude และลองจิจูดหรือไม่ ในที่สุดฉันต้องการค้นหาสิ่งต่าง ๆ เช่นร้านอาหาร 100 แห่งแรกที่อยู่ใกล้กับจุด 105,6 และฐานข้อมูลของฉันมีจำนวนมากและคะแนน เห็นได้ชัดว่าการคำนวณระยะทางทีละหนึ่งสำหรับทุกระเบียนและทุกจุดจะเป็น O (n) และด้วยเหตุนี้ ขอให้สังเกตว่าฉันทราบถึงวิธีแก้ปัญหาที่ง่ายกว่าที่อธิบายไว้ในApplication ระยะทางเหมือน Yelp ดึงข้อมูลระยะทางจากฐานข้อมูลอย่างมีประสิทธิภาพและจะนำไปใช้กับตัวฉันเองด้วยเช่นกันสำหรับการเริ่มต้น นั่นเป็นคำตอบที่ดี อย่างไรก็ตามฉันคิดว่ามีคำตอบสำหรับครอบตัดหนึ่งคำที่ควรมีประสิทธิภาพสูงกว่าใช่ไหม ในความเป็นจริงการจัดเก็บตำแหน่งตามละติจูดและลองจิจูดและการค้นหาสิ่งของที่ใกล้เคียงที่สุดเป็นปัญหาที่พบบ่อยมากฉันคาดว่า mysql จะมีรูปแบบการออกแบบพิเศษสำหรับสิ่งนั้น มันมีหรือไม่ ฉันจะเรียนรู้เพิ่มเติมเกี่ยวกับมันได้ที่ไหน ขอบคุณ
10 mysql 

3
ปัญหาการค้นหา: สามารถมีได้เพียงคอลัมน์เดียวเท่านั้น
ใครช่วยบอกฉันทีว่ามีอะไรผิดปกติกับนิยามตารางนี้ รุ่น mysql คือ 5.1.52-log root@localhost spoolrdb> create table spoolqueue ( queue int, idx bigint not null auto_increment, status smallint, querystring varchar(2048), contenttype varchar(255), characterencoding varchar(16), body text, primary key(queue,idx) ); ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as …
10 mysql  query 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.