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

MyISAM เป็นเอ็นจิ้นการจัดเก็บข้อมูลที่ไม่ใช่ธุรกรรมสำหรับ MySQL มันมีการจัดเก็บข้อมูลความเร็วสูงและการดึงเช่นเดียวกับความสามารถในการค้นหาแบบเต็ม นอกจากนี้มันเป็นประเภทเอ็นจิ้นการจัดเก็บเริ่มต้นสำหรับ MySQL รุ่นก่อนหน้า 5.5

2
ปัญหาประสิทธิภาพการทำงานของ MySQL โดยใช้คอลัมน์วันที่จัดทำดัชนี
ฉันพยายามที่จะแก้ปัญหาต่อไปนี้เป็นเวลาประมาณหนึ่งชั่วโมงในขณะนี้และยังไม่ได้รับเพิ่มเติมด้วย โอเคฉันมีโต๊ะ (MyISAM): +---------+-------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | http | smallint(3) | YES | MUL | 200 | | | elapsed | float(6,3) | NO | …

4
MySQL โหลดข้อมูล INFILE ช้า 80% หลังจากป้อนกิ๊กเล็กน้อยด้วยเครื่องมือ InnoDB
ฉันกำลังโหลดไฟล์ 100GB ผ่าน LOAD DATA INFILE ฉันประสบความสำเร็จกับ MyISAM ไม่กี่ชั่วโมงและทำ ฉันลองใช้ InnoDB ตอนนี้ โหลดเริ่มต้นอย่างรวดเร็วที่มากกว่า 10MB / วินาที (ดูการขยายไฟล์ตารางfile_per_tableเปิดอยู่) แต่หลังจากนั้นประมาณ 5GB ของข้อมูลมันจะช้าลงเป็นช่วง 2-4MB / วินาทีเพราะฉันได้มากกว่า 20GB มันก็ลดลงประมาณ 2MB / วินาที ขนาดบัฟเฟอร์พูล InnoDB คือ 8G และฉันได้ทำสิ่งต่อไปนี้ก่อนที่จะใช้คำสั่งโหลดข้อมูล INFILE: SET @@session.sql_log_bin=0; SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; alter table item_load disable keys; //Run LOAD DATA …

2
เหตุใด MySQL จึงสร้างตารางชั่วคราวจำนวนมากบนดิสก์
ความผิดพลาดในการตั้งค่าใด ๆ อาจนำไปสู่การสร้างตารางชั่วคราวมากเกินไปโดย mysql..mysql tuner แสดง Current max_heap_table_size = 200 M Current tmp_table_size = 200 M Of 17158 temp tables, 30% were created on disk table_open_cache = 125 tables table_definition_cache = 256 tables You have a total of 97 tables You have 125 open tables. Current table_cache hit rate is …
13 mysql  innodb  myisam  memory 

5
มันไม่ฉลาดที่จะเรียกใช้การจำลองแบบบนเซิร์ฟเวอร์จริงหรือไม่?
ฉันใคร่ครวญการตั้งค่าการจำลองแบบ Master-Slave สำหรับฐานข้อมูลของฉัน เซิร์ฟเวอร์ทาสจะใช้สำหรับความซ้ำซ้อนและอาจเป็นเซิร์ฟเวอร์รายงาน อย่างไรก็ตามหนึ่งในปัญหาที่ใหญ่ที่สุดที่ฉันพบคือเราได้ใช้พลังงานอย่างเต็มประสิทธิภาพที่ดาต้าเซ็นเตอร์แล้ว ดังนั้นการเพิ่มเซิร์ฟเวอร์ทางกายภาพอื่นไม่ใช่ตัวเลือก เซิร์ฟเวอร์ฐานข้อมูลที่มีอยู่ของเรานั้นมีการใช้งานไม่เพียงพอเท่าที่ cpu (ค่าเฉลี่ยการโหลดไม่เคยสูงกว่า 1 ใน quad-core) ดังนั้นแนวคิดที่สำคัญคือการโยนในไดรฟ์ใหม่และเพิ่มหน่วยความจำเป็นสองเท่า (จาก 8GB ถึง 16) และเรียกใช้อินสแตนซ์ mysql ที่สองบนเครื่องทางกายภาพเดียวกัน แต่ละอินสแตนซ์จะมีดิสก์แยกต่างหากสำหรับฐานข้อมูล มีอะไรผิดปกติกับความคิดนี้หรือไม่? แก้ไข (ข้อมูลเพิ่มเติม): ฉัน (โชคดี) ไม่เคยมีอะไรเลวร้ายเกิดขึ้นพอที่จะลงเซิร์ฟเวอร์ แต่พยายามวางแผนล่วงหน้า แน่นอนว่าเรามีการสำรองข้อมูลทุกคืนที่เราสามารถกู้คืนได้ แต่ฉันคิดว่าการมีข้อมูลที่ซ้ำซ้อนในดิสก์แยกต่างหากจะให้วิธีแก้ปัญหาที่รวดเร็วกว่าถ้าไดรฟ์ของเซิร์ฟเวอร์หลักล้มเหลว (เห็นได้ชัดว่าไม่ใช่ถ้าเครื่องทั้งหมดหายไป) สำหรับด้านการรายงานตารางใด ๆ ที่เราจะรายงานออกมาก็คือ MyIsam ดังนั้นการอ่านแพง ๆ บนโต๊ะเดียวกันกับที่เขียนไว้สามารถทำให้ชะงักเซิร์ฟเวอร์ได้ การสันนิษฐานของฉันคือการมีเซิร์ฟเวอร์ทาสเพื่อรายงานว่าจะไม่ส่งผลกระทบต่อเซิร์ฟเวอร์หลักตราบใดที่เราขว้าง RAM เพียงพอ (เพราะ cpu โหลดยังไม่มีปัญหา)

1
คำสั่ง MySQL ทำการสืบค้นฐานข้อมูล MyISAM ทั้งหมด
ฉันจะขอบคุณถ้าใครสามารถช่วยฉันในสิ่งที่เป็นคำสั่งที่เหมาะสมใน MySQL เพื่อค้นหาฐานข้อมูลทั้งหมดที่มีเครื่องมือ "MyISAM" ฉันต้องแปลง DB & ทุกตารางจาก MyISAM เป็น InnoDB
13 mysql  innodb  myisam 

3
อินสแตนซ์ MySQL ถ่วงเวลา“ กำลังทำดัชนี SYNC”
ปัญหา อินสแตนซ์ของ MySQL 5.6.20 ที่ทำงานอยู่ (ส่วนใหญ่เป็นเพียง) ฐานข้อมูลที่มีตาราง InnoDB กำลังแสดงแผงลอยเป็นครั้งคราวสำหรับการดำเนินการอัปเดตทั้งหมดเป็นระยะเวลา 1-4 นาทีกับ INSERT, UPDATE และ DELETE ทั้งหมดที่เหลืออยู่ในสถานะ "Query end" เห็นได้ชัดว่าโชคร้ายที่สุด บันทึกการสืบค้นที่ช้าของ MySQL กำลังบันทึกแม้กระทั่งแบบสอบถามที่ไม่สำคัญมากที่สุดด้วยเวลาสอบถามที่ไม่ได้ใช้งานหลายร้อยรายการที่มีการประทับเวลาเดียวกันสอดคล้องกับเวลาที่แผงลอยได้รับการแก้ไข: # Query_time: 101.743589 Lock_time: 0.000437 Rows_sent: 0 Rows_examined: 0 SET timestamp=1409573952; INSERT INTO sessions (redirect_login2, data, hostname, fk_users_primary, fk_users, id_sessions, timestamp) VALUES (NULL, NULL, '192.168.10.151', NULL, 'anonymous', '64ef367018099de4d4183ffa3bc0848a', …

1
ตาราง MySQL ที่มีการบันทึก 100,000 ครั้งมีการสอบถามบ่อยครั้ง
ฉันมีฐานข้อมูลเดียวประมาณ 100 ตารางเพื่อจัดเก็บข้อมูลประเภทต่างๆ ตารางที่สำคัญที่สุดคือตารางคำสั่งของเราซึ่งใช้ในการจัดเก็บคำสั่งซื้อของลูกค้าและมีมากกว่า 100,000 รายการ ณ ปัจจุบันและเพิ่มขึ้นเรื่อย ๆ ตารางนี้เป็นตารางที่มีการสืบค้นมากที่สุดในฐานข้อมูลของเราสำหรับส่วนต่างๆของข้อมูลที่ต้องการจากแดชบอร์ดคำสั่งซื้อแบบเรียลไทม์สถิติการวิเคราะห์และอื่น ๆ ฉันตรวจสอบฐานข้อมูลเป็นประจำและเปิดใช้งานแบบสอบถามช้าในฐานข้อมูลเพื่อติดตามปัญหา ฉันใช้สคริปต์เช่น mysqltuner เพื่อคายแบบสอบถามออกทุกวัน ฉันยังใช้ mysqlsla เพื่อรวบรวมข้อมูลเกี่ยวกับการสืบค้นที่ช้าที่สุด 10 อันดับแรกในฐานข้อมูลของเรา sample stat Count : 11.48k (30.66%) Time : 19.623758 s total, 1.709 ms avg, 239 µs to 2.475017 s max (18.64%) 95% of Time : 5.246833 s total, 481 µs …

2
มี gotchas เลยด้วยการแปลงจาก MyISAM เป็น InnoDB?
ฉันพร้อมที่จะย้ายจาก MyISAM ไปยัง InnoDB แล้ว แต่ต้องการทราบว่ามีรายการสิ่งที่ต้องค้นหามากมายหรือไม่ ตัวอย่างเช่นผมไม่ได้เห็นกล่าวถึงรายการใด ๆ ที่ทำงานDISABLE KEYSบนตาราง InnoDB ALTER TABLEจะโยนเตือนยกเว้นหน้าคู่มือสำหรับ มันเป็นสิ่งที่ฉันต้องรู้ก่อนที่จะเปลี่ยนใจ ฉันคิดว่าฉันสบายดีกับคำสั่งของฉัน แต่ดูเหมือนจะไม่
11 mysql  innodb  myisam 

2
วิธีการวางตารางที่ว่างเปล่า
เป็นไปได้หรือไม่ที่จะลบตารางที่ว่างเปล่าทั้งหมดออกจากฐานข้อมูลขนาดใหญ่ของฉัน (mysql)? ฉันกำลังมองหาคำสั่ง sql ที่จะลบตารางว่างเหล่านั้นทั้งหมดโดยอัตโนมัติ ขณะนี้ฉันมี 305 ตารางในชุดข้อมูลของฉันและประมาณ 30% ของพวกเขาเป็นตารางเปล่าเก่าที่จะไม่ใช้ในแอปพลิเคชันใหม่ของฉัน เพียงชี้แจง ตารางทั้งหมดเป็นประเภท = MyISAM
11 mysql  myisam 

4
วิธีเพิ่มการสำรองข้อมูลที่รวดเร็วและกู้คืนฐานข้อมูล 500GB โดยใช้ mysqldump
มีฐานข้อมูลขนาด 500GB ตารางในฐานข้อมูล A มีทั้งตาราง MyISAM และ INNODB ตาราง MyISAM เป็นตารางต้นแบบและตาราง Innodb เป็นตารางธุรกรรมหลัก สำรองและคืนค่าโดยใช้การถ่ายโอนข้อมูล mysql ออกจากเวลานานหรือวัน max_allowed_packet = 1G foreign_key_checks = 0 auto_commit = ปิด

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 …

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 …

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 …

5
จะกำหนด sort_buffer_size ที่เหมาะสมได้อย่างไร?
ฉันอ่านจากไฟล์กำหนดค่าตัวอย่างซึ่งระบุสิ่งต่อไปนี้: # Sort buffer is used to perform sorts for some ORDER BY and GROUP BY # queries. If sorted data does not fit into the sort buffer, a disk # based merge sort is used instead - See the "Sort_merge_passes" # status variable. Allocated per thread if sort is …

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