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

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

3
วิธีเพิ่มความเร็วคิวรีในตาราง 220 ล้านแถวขนาดใหญ่ (ข้อมูล 9 กิกะไบต์)
ปัญหา: เรามีเว็บไซต์โซเชียลที่สมาชิกสามารถให้คะแนนซึ่งกันและกันเพื่อความเข้ากันได้หรือการจับคู่ นี้user_match_ratingsตารางที่มีมากกว่า 220 ล้านแถว (9 ข้อมูลกิ๊กหรือเกือบ 20 กิ๊กในดัชนี) ข้อความค้นหาที่อยู่ในตารางนี้แสดงเป็นประจำใน slow.log (threshold> 2 วินาที) และเป็นข้อความค้นหาช้าที่บันทึกบ่อยที่สุดในระบบ Query_time: 3 Lock_time: 0 Rows_sent: 3 Rows_examined: 1051 "select rating, count(*) as tally from user_match_ratings where rated_user_id = 395357 group by rating;" Query_time: 4 Lock_time: 0 Rows_sent: 3 Rows_examined: 1294 "select rating, count(*) as tally …

6
ตระกูลสื่อบนอุปกรณ์เกิดขึ้นไม่ถูกต้อง SQL Server ไม่สามารถประมวลผลตระกูลสื่อนี้
ฉันพยายามกู้คืน. BAK ในเซิร์ฟเวอร์ SQL แต่ได้รับข้อผิดพลาดต่อไปนี้: ข่าวสารเกี่ยวกับ 3241, ระดับ 16, สถานะ 7, สาย 1 ตระกูลสื่อบนอุปกรณ์ 'c: \ glyn \ JA.bak' เกิดขึ้นไม่ถูกต้อง SQL Server ไม่สามารถประมวลผลตระกูลสื่อนี้ ข่าวสารเกี่ยวกับ 3013 ระดับ 16 สถานะ 1 บรรทัด 1 ฐานข้อมูลการคืนค่าถูกยกเลิกอย่างผิดปกติ ฉันได้ลองกู้คืนโดยใช้ 2012, 2008 และแม้กระทั่งปี 2005 แต่ไม่มีอะไรทำงานฉันได้ใช้แบบสอบถามต่อไปนี้และผ่านTasks >> Back upแต่ไม่มีอะไรทำงานนี่คือ SQL ของฉัน: RESTORE DATABASE JA FROM DISK='c:\glyn\JA.bak' ไม่มีใครมีข้อเสนอแนะใด ๆ …

4
ฉันจะระบุคอลัมน์ที่รับผิดชอบ "ข้อมูลสตริงหรือไบนารีจะถูกตัดทอนได้อย่างไร"
ฉันกำลังสร้างการสืบค้นบางอย่างโดยอัตโนมัติด้วยรหัสที่ฉันเขียนถึง SELECT จากฐานข้อมูล Pg ระยะไกลและแทรกลงในฐานข้อมูล SQL Server ท้องถิ่น อย่างไรก็ตามหนึ่งในนั้นกำลังสร้างข้อผิดพลาดนี้: [Microsoft] [โปรแกรมควบคุมเซิร์ฟเวอร์ ODBC SQL] [เซิร์ฟเวอร์ SQL] สตริงหรือข้อมูลไบนารีจะถูกตัดทอน (SQL-22001) [สถานะเป็น 22001 ตอนนี้ 01000] [Microsoft] [โปรแกรมควบคุมเซิร์ฟเวอร์ ODBC SQL] [เซิร์ฟเวอร์ SQL] คำสั่งถูกยกเลิก (SQL-01000) ที่. \ insert.pl บรรทัด 106 ฉันจะค้นหาคอลัมน์ใดที่ทำให้เกิดข้อผิดพลาดนั้นและไม่มีความยาวสำหรับอินพุตได้อย่างไร มีวิธีการทำเช่นนี้โดยไม่คาดเดาสัตว์เดรัจฉานvarcharหรือไม่?

3
วิธีที่แนะนำในการสำรองฐานข้อมูล MySQL / Amazon RDS ไปยัง S3 คืออะไร
ฉันมีสองวัตถุประสงค์นี้: หากต้องการสำรองข้อมูลนอกสถานที่ในกรณีที่เกิดปัญหาในระดับภูมิภาคกับ Amazon Web Services เพื่อคัดลอกข้อมูลการผลิตจากบัญชีการเรียกเก็บเงินการผลิตไปยังบัญชีการเรียกเก็บเงินเบต้า ขณะนี้ยังไม่ปรากฏว่า Amazon รองรับกรณีใช้งานทั้งสองกรณีนี้นอกกรอบ ฉันได้เห็น mysqldump และ xtrabackup (ดูโพสต์แบบฟอร์ม ) ที่กล่าวถึง ฉันได้เห็นกระบวนการที่ซับซ้อนมากขึ้น (เอกสารที่นี่ ) เซิร์ฟเวอร์ RDS ใหม่ในบัญชีการเรียกเก็บเงินต้นทาง (prod) จะถูกปั่นออกจากการสำรองข้อมูลล่าสุด อินสแตนซ์ EC2 ใหม่จะหมุนขึ้นที่มีการเข้าถึงเซิร์ฟเวอร์ RDS ในขั้นตอนที่ 1 mysqldump ใช้เพื่อสำรองข้อมูลของฐานข้อมูลนี้ สำรองข้อมูลถูกคัดลอกไปยังตำแหน่งนอกสถานที่ (S3?) ในบัญชีแยกต่างหากและ / หรือภูมิภาคเซิร์ฟเวอร์ RDS ใหม่จะหมุนตัว ดัมพ์ฐานข้อมูลถูกอิมพอร์ต เคล็ดลับและคำแนะนำได้รับการชื่นชม

5
ตกลงเพื่อเก็บค่าซึ่งอัพเดตในตารางหรือไม่?
เรากำลังพัฒนาแพลตฟอร์มสำหรับบัตรเติมเงินซึ่งโดยทั่วไปเก็บข้อมูลเกี่ยวกับบัตรและยอดเงินการชำระเงินและอื่น ๆ จนถึงตอนนี้เรามีนิติบุคคลที่มีการรวบรวมบัญชีนิติบุคคลและแต่ละบัญชีมีจำนวนเงินซึ่งจะอัพเดทในทุกการฝาก / ถอน ตอนนี้มีการถกเถียงกันในทีม มีคนบอกเราว่าการแบ่งกฎ 12 ข้อของ Coddและการอัปเดตค่าในการชำระเงินแต่ละครั้งนั้นเป็นปัญหา นี่เป็นปัญหาจริงๆหรือ ถ้าเป็นเช่นนั้นเราจะแก้ไขได้อย่างไร

1
การออกแบบแพลตฟอร์ม: ฐานข้อมูลเดียวหรือหลายฐานข้อมูล?
เรากำลังสร้างแพลตฟอร์มเว็บที่รวมบริการหลายอย่างแต่ละรายการมีข้อมูลอ้างอิงของตนเอง บริการเหล่านี้ถูกสร้างขึ้นอย่างอิสระตามหลักการของService-Oriented Architectureแต่ทำธุรกรรมกับข้อมูลที่อาจเกี่ยวข้อง เรากำลังพิจารณาว่าบริการเหล่านี้ควรแบ่งปันฐานข้อมูลขนาดใหญ่หนึ่งฐานหรือแต่ละแห่งมีฐานข้อมูลของตนเอง (เราวางแผนที่จะใช้ SQL Server 2008 Enterprise ในคลัสเตอร์ Windows 2008) ข้อดีบางประการสำหรับแต่ละวิธีที่เราพิจารณาแล้วรวมถึง: ฐานข้อมูลเดียว ข้อมูลที่เกี่ยวข้องจากบริการที่แตกต่างกันสามารถถูกรวมเข้าด้วยกันโดยข้อ จำกัด ของกุญแจต่างประเทศ สารสกัดจากการวิเคราะห์นั้นง่ายต่อการเขียนและดำเนินการได้เร็วขึ้น ในกรณีที่เกิดภัยพิบัติการกู้คืนแพลตฟอร์มให้อยู่ในสถานะที่สอดคล้องกันนั้นง่ายขึ้น สำหรับข้อมูลที่อ้างอิงโดยหลายบริการข้อมูลที่แคชโดยบริการหนึ่งมีแนวโน้มที่จะถูกใช้ในไม่ช้าหลังจากบริการอื่น การบริหารและการตรวจสอบนั้นง่ายและถูกกว่า หลายฐานข้อมูล งานบำรุงรักษาปัญหาฮาร์ดแวร์การละเมิดความปลอดภัยและอื่น ๆ ไม่จำเป็นต้องส่งผลกระทบต่อแพลตฟอร์มทั้งหมด สมมติว่าแต่ละฐานข้อมูลอยู่บนฮาร์ดแวร์ที่แยกจากกันการขยายขนาดของหลายเครื่องจะให้ประโยชน์ด้านประสิทธิภาพมากกว่าการปรับขนาดฐานขนาดใหญ่ขึ้น จากมุมมองการดำเนินงานเป็นประโยชน์หรือไม่ที่แต่ละบริการในแพลตฟอร์มนี้ได้รับฐานข้อมูลของตนเองหรือว่าพวกเขาทั้งหมดไปในฐานข้อมูลเดียวกัน ปัจจัยสำคัญใดที่แจ้งคำตอบสำหรับคำถามนี้

3
เพื่อประสิทธิภาพที่สมบูรณ์ SUM จะเร็วขึ้นหรือ COUNT หรือไม่
invoice amount > $100นี้เกี่ยวข้องกับการนับจำนวนของระเบียนที่ตรงกับเงื่อนไขบางอย่างเช่น ฉันมักจะชอบ COUNT(CASE WHEN invoice_amount > 100 THEN 1 END) อย่างไรก็ตามนี่เป็นเพียงที่ถูกต้อง SUM(CASE WHEN invoice_amount > 100 THEN 1 ELSE 0 END) ฉันคิดว่า COUNT นั้นดีกว่าด้วยเหตุผล 2 ประการ: บ่งบอกถึงความตั้งใจซึ่งก็คือ COUNT COUNT อาจเกี่ยวข้องกับการi += 1ดำเนินการอย่างง่ายที่ไหนสักแห่งในขณะที่ SUM ไม่สามารถพึ่งพาการแสดงออกที่จะเป็นค่าจำนวนเต็มง่าย ใครบ้างมีข้อเท็จจริงเฉพาะเกี่ยวกับความแตกต่างของ RDBMS ที่เฉพาะเจาะจงหรือไม่

3
สถานการณ์การใช้งานที่ถูกต้องสำหรับตาราง HEAP คืออะไร
ขณะนี้ฉันกำลังนำเข้าข้อมูลบางอย่างไปยังระบบดั้งเดิมและพบว่าระบบนี้ไม่ได้ใช้ดัชนีคลัสเตอร์เดียว การค้นหาโดย Google อย่างรวดเร็วแนะนำให้ฉันรู้จักกับแนวคิดของตาราง HEAP และตอนนี้ฉันอยากรู้ว่าในสถานการณ์การใช้งานใดที่ควรใช้ตาราง HEAP บนตารางคลัสเตอร์มากกว่านี้ เท่าที่ฉันเข้าใจตาราง HEAP จะมีประโยชน์สำหรับตารางการตรวจสอบและ / หรือตำแหน่งที่แทรกเกิดขึ้นบ่อยกว่าการเลือก มันจะประหยัดพื้นที่ดิสก์และดิสก์ I / O เนื่องจากไม่มีดัชนีคลัสเตอร์ที่ต้องบำรุงรักษาและการแตกแฟรกเมนต์เพิ่มเติมจะไม่เป็นปัญหาเนื่องจากการอ่านที่หายากมาก

3
การใช้คีย์ต่างประเทศหลายอันคั่นด้วยเครื่องหมายจุลภาคผิดหรือไม่และถ้าใช่ทำไม
มีสองตาราง: และDeal DealCategoriesดีลหนึ่งสามารถมีได้หลายประเภทดีล ดังนั้นวิธีที่เหมาะสมควรทำตารางที่DealCategoriesมีโครงสร้างดังนี้ DealCategoryId (PK) DealId (FK) DealCategoryId (FK) อย่างไรก็ตามทีมงานภายนอกของเราเก็บหลายหมวดหมู่ไว้ใน Dealตารางด้วยวิธีนี้: DealId (PK) DealCategory -- In here they store multiple deal ids separated by commas like this: 18,25,32. ฉันรู้สึกว่าสิ่งที่พวกเขาทำผิด แต่ฉันไม่รู้วิธีอธิบายอย่างชัดเจนว่าทำไมสิ่งนี้ไม่ถูกต้อง ฉันจะอธิบายให้พวกเขาฟังได้อย่างไรว่าสิ่งนี้ผิด หรือบางทีฉันเป็นคนที่ผิดและเป็นที่ยอมรับ?

6
โหลดบาลานซ์ด้วย SQL Server
สิ่งที่มีอยู่ในปัจจุบันในการทำ Microsoft SQL Server Load Balancing บน Windows Server และโปร่งใสในการเข้าถึงด้วยโปรแกรม สิ่งนี้มีอยู่ในตัวหรือไม่ต้องซื้อโซลูชันหรือไม่ ฉันพยายามที่จะหาว่ามีวิธีแก้ปัญหาในวันนี้ที่ทำให้ง่ายมากจากมุมมองของเว็บเซิร์ฟเวอร์หรือการเข้าถึงฐานข้อมูลอื่น ๆ ไปยัง SQL Server
31 sql-server 

5
มีกระบวนการพิมพ์ "แนวปฏิบัติที่ดีที่สุด" สำหรับผู้พัฒนาเพื่อติดตามการเปลี่ยนแปลงฐานข้อมูลหรือไม่?
เป็นวิธีที่ดีในการโยกย้ายการเปลี่ยนแปลงฐานข้อมูลจากการพัฒนาเพื่อ QA ไปยังสภาพแวดล้อมการผลิตคืออะไร? ขณะนี้เรา: สคริปต์การเปลี่ยนแปลงในไฟล์ SQL และแนบกับไอเท็มงาน TFS การทำงานคือการตรวจสอบโดยเพื่อน เมื่องานพร้อมสำหรับการทดสอบ SQL จะทำงานบน QA งานทดสอบ QA เมื่องานพร้อมสำหรับการผลิตแล้ว SQL จะทำงานบนฐานข้อมูลการผลิต ปัญหาของเรื่องนี้คือมันเป็นคู่มือมาก มันขึ้นอยู่กับนักพัฒนาที่จำได้ว่าจะแนบ sql หรือผู้ตรวจทานเพื่อนจับมันถ้านักพัฒนาลืม บางครั้งมันก็กลายเป็นผู้ทดสอบหรือปรับใช้ QA ที่พบปัญหา ปัญหาที่สองคือบางครั้งคุณจำเป็นต้องประสานงานการเปลี่ยนแปลงด้วยตนเองหากงานสองงานแยกกันเปลี่ยนวัตถุฐานข้อมูลเดียวกัน นี่อาจเป็นวิธีที่มันเป็น แต่ก็ยังดูเหมือนว่าควรมีวิธีอัตโนมัติในการ "ตั้งค่าสถานะ" ปัญหาเหล่านี้หรือบางสิ่งบางอย่าง การตั้งค่าของเรา: ร้านค้าพัฒนาของเราเต็มไปด้วยนักพัฒนาที่มีประสบการณ์ DB มากมาย โครงการของเรามุ่งเน้นฐานข้อมูลเป็นอย่างมาก เราเป็นร้าน. NET และ MS SQL เป็นหลัก ขณะนี้เรากำลังใช้รายการงาน MS TFS เพื่อติดตามงานของเรา สิ่งนี้มีประโยชน์สำหรับการเปลี่ยนแปลงรหัสเพราะมันเชื่อมโยงชุดการเปลี่ยนแปลงไปยังรายการงานเพื่อให้ฉันสามารถค้นหาสิ่งที่เปลี่ยนแปลงที่ฉันต้องรวมเมื่อย้ายไปยัง QA และสภาพแวดล้อมการผลิต ขณะนี้เราไม่ได้ใช้โครงการ DB …

2
คำขอ I / O ใช้เวลานานกว่า 15 วินาที
โดยทั่วไปแล้วการสำรองข้อมูลเต็มรูปแบบรายสัปดาห์ของเราจะเสร็จสิ้นในเวลาประมาณ 35 นาทีโดยมีการสำรองข้อมูลต่าง ๆ รายวันเสร็จใน ~ 5 นาที ตั้งแต่วันอังคารหนังสือพิมพ์รายวันใช้เวลาเกือบ 4 ชั่วโมงจึงจะเสร็จสมบูรณ์ บังเอิญสิ่งนี้เริ่มเกิดขึ้นทันทีหลังจากที่เราได้ SAN / disk config ใหม่ โปรดทราบว่าเซิร์ฟเวอร์กำลังทำงานในการผลิตและเราไม่มีปัญหาโดยรวมก็ทำงานได้อย่างราบรื่น - ยกเว้นปัญหา IO ที่ปรากฏตัวเป็นหลักในการสำรองข้อมูล ดูที่ dm_exec_requests ระหว่างการสำรองข้อมูลการสำรองข้อมูลกำลังรอ ASYNC_IO_COMPLETION อยู่ตลอดเวลา อ๊ะเรามีข้อขัดแย้งของดิสก์! อย่างไรก็ตามทั้ง MDF (บันทึกจะถูกเก็บไว้ในโลคัลดิสก์) หรือไดรฟ์สำรองไม่มีกิจกรรมใด ๆ (IOPS ~ = 0 - เรามีหน่วยความจำมากมาย) ความยาวคิวของดิสก์ ~ = 0 เช่นกัน CPU วนเวียนอยู่ประมาณ 2-3% ไม่มีปัญหาเช่นกัน SAN เป็น …

15
วิธีการติดตั้งแฟล็ก 'เริ่มต้น' ที่สามารถตั้งค่าได้ในแถวเดียวเท่านั้น
ตัวอย่างเช่นมีตารางที่คล้ายกับสิ่งนี้: create table foo(bar int identity, chk char(1) check (chk in('Y', 'N'))); มันไม่สำคัญว่าจะมีการนำธงไปใช้เป็นchar(1)a bitหรืออะไรก็ตาม ฉันแค่ต้องการให้สามารถบังคับใช้ข้อ จำกัด ที่สามารถตั้งค่าได้ในแถวเดียวเท่านั้น

3
ฐานข้อมูลหนึ่งต่อไคลเอนต์กลายเป็นจุดที่ไม่สามารถทำได้?
สำหรับหนึ่งในระบบของเราเรามีข้อมูลลูกค้าที่ละเอียดอ่อนและจัดเก็บข้อมูลลูกค้าแต่ละรายในฐานข้อมูลแยกต่างหาก เรามีลูกค้าประมาณ 10-15 คนสำหรับระบบนั้น อย่างไรก็ตามเรากำลังพัฒนาระบบใหม่ที่จะมีลูกค้า 50-100 รายอาจจะมากกว่านี้ ฉันคิดว่ามันอาจเป็นไปไม่ได้ที่จะมีฐานข้อมูลเดียวต่อลูกค้าในตัวอย่างนี้ (เพื่อเก็บบันทึกที่ละเอียดอ่อนและประวัติการตรวจสอบ) อย่างไรก็ตามฉันไม่รู้ว่านี่เป็นเรื่องปกติอย่างสมบูรณ์หรือไม่หรือหากมีวิธีอื่นในการรักษาความปลอดภัย ความคิดใด ๆ เกี่ยวกับเรื่องนี้?

5
ปรับปรุงประสิทธิภาพที่ไม่มีข้อมูลเปลี่ยนแปลง
ถ้าฉันมีUPDATEคำสั่งที่ไม่ได้เปลี่ยนข้อมูลใด ๆ (เพราะข้อมูลอยู่ในสถานะที่ปรับปรุงแล้ว) มีประโยชน์ด้านประสิทธิภาพใด ๆ ในการวางการตรวจสอบในWHEREข้อเพื่อป้องกันการอัพเดตหรือไม่? ตัวอย่างเช่นจะมีความแตกต่างในความเร็วการดำเนินการระหว่าง UPDATE 1 และ UPDATE 2 ในสิ่งต่อไปนี้: CREATE TABLE MyTable (ID int PRIMARY KEY, Value int); INSERT INTO MyTable (ID, Value) VALUES (1, 1), (2, 2), (3, 3); -- UPDATE 1 UPDATE MyTable SET Value = 2 WHERE ID = 2 AND Value <> …

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