ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

3
หน่วยความจำที่ใช้ไม่ได้เพิ่มขึ้นหลังจาก SQL BULK Insert / BCP Export
ฉันได้สร้างตาราง SQL พื้นฐานมากดังต่อไปนี้ CREATE TABLE [dbo].[TickData]( [Date] [varchar](12) NULL, [Time] [varchar](12) NOT NULL, [Symbol] [varchar](12) NOT NULL, [Side] [varchar](2) NOT NULL, [Depth] [varchar](2) NOT NULL, [Quote] [varchar](12) NOT NULL, [Size] [varchar](18) NOT NULL ) ON [PRIMARY] จากนั้นฉันก็ทำการแทรก 3 Gig Bulk BULK INSERT TickData FROM 'C:\SUMO.csv' GO จากนั้นการใช้ RAM สำหรับเซิร์ฟเวอร์ SQL …

4
วิธีการใช้ประโยชน์สูงสุดจาก MySQL บนเครื่อง QuadCore ด้วย RAM ขนาด 16 GB?
ฉันใช้เซิร์ฟเวอร์ MySQL 5.5 บนเวิร์กสเตชันของฉันสำหรับการวิเคราะห์ข้อมูลทางวิทยาศาสตร์และสงสัยว่าจะกำหนดค่า MySQL อย่างไรเพื่อให้ได้ประสิทธิภาพที่ดีที่สุด ประเภทของแบบสอบถามที่ฉันใช้โดยทั่วไปเกี่ยวข้องกับการรวม 10-20 ตารางและสามารถทำงานได้ค่อนข้างนานหนึ่งถึงหลายนาทีโดยไม่มีข้อยกเว้นเลย มีผู้ใช้เพียงไม่กี่รายเท่านั้นที่เข้าถึงฐานข้อมูลในเวลาเดียวกัน (5 เป็นจำนวนสูงสุด) ฉันย้ายเซิร์ฟเวอร์จาก Lenovo Thinkpad T61 ด้วย Dual Core 2.2 GHz และ RAM 4 GB ไปยังเครื่องใหม่ที่มีส่วนประกอบที่เลือกด้วยมือ: Intel i7 3770, 4x 3.4 GHz (ทำงานที่ 4x3.7 GHz) ชิปเซ็ต Z77 DDR3 1600 RAM 16 GB Windows 7 Prof 64-bit เซิร์ฟเวอร์ Windows และ MySQL …

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 …

1
กระบวนงานที่เก็บไว้เพื่อส่งคืนข้อมูลตารางที่สร้างขึ้นแบบไดนามิก
เรื่องราวย้อนกลับอย่างรวดเร็วเรากำลังทำงานกับผู้ขายภายนอกที่มีระบบสำรวจ ระบบไม่ได้ถูกออกแบบมาอย่างดีที่สุดเมื่อคุณสร้างแบบสำรวจใหม่และระบบจะสร้างตารางใหม่เช่น: Tables ____ Library_1 -- table for Survey 1 SurveyId int InstanceId int Q_1 varchar(50) Library_2 -- table for Survey 2 SurveyId int InstanceId int Q_2 int Q_3 int Q_4 varchar(255) ตารางจะถูกสร้างขึ้นด้วยการSurveyIdที่ส่วนท้ายของชื่อ ( Library_) และคอลัมน์คำถามจะถูกสร้างขึ้นด้วยการQuestionIdที่ส่วนท้ายของมัน ( Q_) ในการชี้แจงคำถามจะถูกเก็บไว้ในตารางแยกต่างหากดังนั้นในขณะที่รหัสคำถามนั้นเรียงตามลำดับโดยไม่เริ่มต้นที่ 1 สำหรับแต่ละแบบสำรวจ คอลัมน์คำถามจะขึ้นอยู่กับรหัสที่กำหนดให้กับพวกเขาในตาราง ดูเหมือนง่ายพอที่จะสืบค้นยกเว้นเราจำเป็นต้องดึงข้อมูลจากตารางสำรวจทั้งหมดที่จะส่งไปยังระบบอื่นและนี่คือที่มาของปัญหาเนื่องจากตารางจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อมีการเพิ่มแบบสำรวจใหม่โดยหน้า แอปพลิเคชันสิ้นสุดระบบอื่นไม่สามารถจัดการกับโครงสร้างประเภทนี้ได้ พวกเขาต้องการข้อมูลที่สอดคล้องกันเพื่อให้สามารถบริโภคได้ ดังนั้นฉันจึงมอบหมายให้เขียนโพรซีเดอร์ที่เก็บไว้ซึ่งจะดึงข้อมูลจากตารางสำรวจทั้งหมดและวางไว้ในรูปแบบต่อไปนี้: SurveyId InstanceId QNumber Response …

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 ภายในเพื่อดูว่าฉันสามารถหาเขตข้อมูลเพื่อล้างได้หรือไม่ …

5
ฟังก์ชัน SQL ตารางที่มีค่าเพื่อแยกคอลัมน์บนเครื่องหมายจุลภาค
ฉันเขียน Table Valued Function ใน Microsoft SQL Server 2008 เพื่อใช้คอลัมน์คั่นด้วยเครื่องหมายจุลภาคในฐานข้อมูลเพื่อแยกแถวที่แยกออกสำหรับแต่ละค่า เช่น: "หนึ่งสองสามสี่" จะส่งคืนตารางใหม่โดยมีเพียงหนึ่งคอลัมน์ที่มีค่าต่อไปนี้: one two three four รหัสนี้มีข้อผิดพลาดเกิดขึ้นกับคุณหรือเปล่า? เมื่อฉันทดสอบด้วย SELECT * FROM utvf_Split('one,two,three,four',',') มันวิ่งไปตลอดกาลและจะไม่ส่งคืนสิ่งใดเลย นี่เป็นสิ่งที่ทำให้ท้อใจโดยเฉพาะอย่างยิ่งเนื่องจากไม่มีฟังก์ชั่นแยกในเซิร์ฟเวอร์ MSSQL (ทำไมเพราะอะไร?!) และฟังก์ชั่นที่คล้ายกันทั้งหมดที่ฉันพบบนเว็บเป็นถังขยะแน่นอนหรือไม่เกี่ยวข้องกับสิ่งที่ฉันพยายามทำ . นี่คือฟังก์ชั่น: USE *myDBname* GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR) RETURNS @SplitValues …

1
PostgreSQL ข้อความประเภทข้อมูล vs varchar โดยไม่มีความยาว
ใน PostgreSQL คุณสามารถสร้างคอลัมน์ที่มีอักขระชนิดข้อมูลเปลี่ยนแปลง (โดยไม่มีความแม่นยำความยาว) หรือข้อความเช่นนี้: ALTER TABLE test ADD COLUMN c1 varchar; ALTER TABLE test ADD COLUMN c2 text; มีความแตกต่างระหว่างชนิดข้อมูลสองชนิดนี้หรือไม่ เอกสารไม่ชัดเจนเกี่ยวกับเรื่องนี้ พวกเขาพูดว่า: หากใช้การเปลี่ยนแปลงอักขระโดยไม่มีตัวระบุความยาวชนิดจะยอมรับสตริงที่มีขนาดใดก็ได้ [ ... ] นอกจากนี้ PostgreSQL ยังมีประเภทข้อความซึ่งจัดเก็บสตริงที่มีความยาวเท่าใดก็ได้ ดูเหมือนว่าทั้งสองประเภทข้อมูลจะเทียบเท่า แต่ไม่ชัดเจน ... ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้? ขอบคุณนิโก้

2
ดัชนีใช้หน่วยความจำหรือไม่
ฉันเพิ่งเริ่มเรียนรู้เกี่ยวกับการใช้หน่วยความจำบน SQL Server เมื่อใช้แบบสอบถามในคำตอบของคำถามSQL Server 2008 R2 "Ghost Memory" ฉันค้นพบว่าฐานข้อมูลเดียวใช้พื้นที่แบ่งส่วนของสิงโตในบัฟเฟอร์พูล ดูเพิ่มเติมการใช้sys.allocation_unitsและsys.indexesฉันยืนยันว่าน่าจะเกิดจากการใช้ดัชนีจำนวนมากในฐานข้อมูล ดัชนีส่วนใหญ่เป็นกลุ่ม นักพัฒนาฐานข้อมูลรายอื่นเชื่อว่าเรากำลังประสบปัญหาหน่วยความจำบนเซิร์ฟเวอร์ - ข้อความค้นหาเริ่มต้นทำงานได้นานเนื่องจากไม่มีหน่วยความจำที่พร้อมใช้งาน คำถามของฉันคือ - การใช้ดัชนีเหล่านี้และการมีอยู่ของพวกเขาในบัฟเฟอร์พูลทำให้มีหน่วยความจำว่างสำหรับกระบวนการอื่นหรือไม่?

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
Oracle: ฉันจะค้นหาตารางลำดับชั้นได้อย่างไร
พื้นหลัง นี่คือการสร้างมุมมองบางอย่างที่เราจะใช้สำหรับการรายงาน ฉันมีตารางของสถานที่คีย์ฟิลด์เป็น "สถานที่" และ "ผู้ปกครอง" โครงสร้างที่สองฟิลด์นี้สร้างระดับที่ชาญฉลาดจะอยู่ในแนวเดียวกันกับชื่อ บริษัท -> ชื่อวิทยาเขต -> ชื่ออาคาร -> ชื่อชั้น -> ชื่อห้อง ชื่อ บริษัท ยังคงเหมือนเดิมและชื่อวิทยาเขตจะยังคงเหมือนเดิมในกรณีนี้ โครงสร้างของสถานที่โดยทั่วไปมีลักษณะดังนี้: +-----------+ | Org. Name | +-----+-----+ | +-----v-----+ +--------------------+|Campus Name|+---+--+-------------+ | +--+--------+ | | | | | | | | | | +--+-----+ +------+-+ +--+----+ +---+---+ +--+| BLDG-01|+--+ | BLDG-02| …
10 oracle  query  view  hierarchy 

3
วิธีบันทึกรายละเอียดข้อผิดพลาดเมื่อใช้ลอง / จับสำหรับคำสั่งสำรอง SQL แบบไดนามิก
เมื่อออกคำสั่งสำรองข้อมูลภายในโพรซีเดอร์ที่เก็บไว้ซึ่งใช้ try catch และ dynamic sql ข้อความแสดงข้อผิดพลาดทั่วไปมากเมื่อเปรียบเทียบกับการรันคำสั่ง backup โดยตรง ลอง / จับภายใน SP: begin try execute sp_executesql @sql; -- a backup command end try begin catch print ERROR_MESSAGE(); -- save to log, etc. end catch ผลลัพธ์ใน 50000: usp_Backup: 117: BACKUP DATABASE สิ้นสุดลงอย่างผิดปกติ ในขณะที่การออกคำสั่ง raw: backup DATABASE someDb to disk... ผลลัพธ์โดยละเอียดยิ่งขึ้น: …

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 | …

3
ประสิทธิภาพ TSQL - เข้าร่วมกับมูลค่าระหว่างต่ำสุดและสูงสุด
ฉันมีสองตารางที่ฉันเก็บ: ช่วง IP - ตารางการค้นหาประเทศ รายการคำขอมาจาก IP ที่ต่างกัน IP ถูกเก็บไว้เป็นbigints เพื่อปรับปรุงประสิทธิภาพการค้นหา นี่คือโครงสร้างของตาราง: create table [dbo].[ip2country]( [begin_ip] [varchar](15) NOT NULL, [end_ip] [varchar](15) NOT NULL, [begin_num] [bigint] NOT NULL, [end_num] [bigint] NOT NULL, [IDCountry] [int] NULL, constraint [PK_ip2country] PRIMARY KEY CLUSTERED ( [begin_num] ASC, [end_num] ASC ) ) create table Request( Id …

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