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

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

6
แผนปฏิบัติการช้าสำหรับ Proc ที่เก็บไว้
ฉันกำลังพยายามที่จะเข้าใจปัญหาที่เรามีกับ SQL Server 2000 เราเป็นเว็บไซต์ที่ทำธุรกรรมปานกลางและเรามี proc ที่เก็บไว้sp_GetCurrentTransactionsซึ่งเรียกว่ารับรหัสลูกค้าและสองวัน ตอนนี้ขึ้นอยู่กับวันที่และลูกค้าแบบสอบถามนี้สามารถส่งคืนอะไรก็ได้จากศูนย์ถึง 1,000 แถว ปัญหา: สิ่งที่เราพบคือทันใดนั้นเราจะได้รับข้อผิดพลาดจำนวนมาก (โดยทั่วไปExecution Timeout Expiredหรือคล้ายกัน) สำหรับลูกค้าเฉพาะขณะที่พวกเขาลองดำเนินการ proc ที่เก็บไว้ ดังนั้นเราตรวจสอบแบบสอบถามเรียกใช้ใน SSMS และพบว่าใช้เวลา 30 วินาที ดังนั้นเราจึงคอมไพล์ proc ที่เก็บไว้และ -bang- อีกครั้งมันทำงานใน 300ms ฉันได้พูดคุยกับ DBA ของเราเกี่ยวกับเรื่องนี้แล้ว เขาบอกฉันว่าฐานข้อมูลสร้างแผนแบบสอบถามเมื่อเราสร้าง proc ที่เก็บไว้ เขาบอกว่ามันเป็นแผนการที่ดีสำหรับชุดของพารามิเตอร์นั้น แต่ถ้าคุณโยนชุดของพารามิเตอร์ที่กำหนดไว้แผนจะไม่เป็นแผนการที่ดีที่สุดสำหรับข้อมูลนั้นและคุณจะเห็นว่ามันทำงานช้า ตัวเลือกที่นำเสนอให้ฉันคือการย้ายที่แบบสอบถามปัญหาจาก proc ที่เก็บไว้และกลับสู่ SQL แบบไดนามิกที่มีแผนการดำเนินการที่สร้างขึ้นในการทำงานทุกครั้ง มันให้ความรู้สึกเหมือนย้อนกลับไปหาฉันและฉันรู้สึกว่าต้องมีวิธีแก้ไข มีวิธีอื่นในการจัดการกับปัญหานี้หรือไม่? คำตอบใด ๆ และทั้งหมดได้รับการชื่นชม

1
ขยายระยะเวลาเหตุการณ์มิลลิวินาทีหรือไมโครวินาที?
มีคำถามในฟอรัมนี้เกี่ยวกับmodule_endหน่วยระยะเวลาขยายกิจกรรมซึ่งฉันตอบ รายละเอียดที่นี่ มันเป็นไมโครวินาทีสำหรับเหตุการณ์ทั้งหมดหรือไม่

3
แยกคอลัมน์เดือนและปีหรือวันที่ที่มีวันตั้งเป็น 1 เสมอ
ฉันกำลังสร้างฐานข้อมูลด้วย Postgres ซึ่งจะมีการจัดกลุ่มของสิ่งต่าง ๆ มากมายโดยmonthและyearไม่เคยทำมาdateก่อน ฉันสามารถสร้างจำนวนเต็มmonthและyearคอลัมน์และใช้สิ่งเหล่านั้น หรือฉันอาจมีmonth_yearคอลัมน์และตั้งค่าเป็นday1 เสมอ อดีตดูเหมือนจะง่ายขึ้นเล็กน้อยและชัดเจนขึ้นถ้ามีคนดูข้อมูล แต่หลังนั้นดีในการใช้ประเภทที่เหมาะสม

1
จุดตรวจสอบเกิดขึ้นบ่อยเกินไประหว่าง pg_restore
ภายใต้ PostgreSQL 9.2.2 (Windows 32 บิต) ฉันมีpg_restoreคำสั่งที่ส่งผลให้เกิดคำเตือนเกี่ยวกับความถี่ของจุดตรวจสอบอย่างเป็นระบบเช่น: LOG: checkpoints are occurring too frequently (17 seconds apart) HINT: Consider increasing the configuration parameter "checkpoint_segments". ฐานข้อมูลมีขนาดประมาณ 3.3 Gb โดยมี 112 tables / 160 views และเรียกคืนได้ในเวลาประมาณ 14 นาที เป็นเรื่องปกติpg_restoreหรือไม่ที่จะเกิดขึ้นในช่วง a ?

3
แบบสอบถามช่วงวันที่สำหรับ 24 ชั่วโมงที่ผ่านมาในเชลล์ Mongo
ฉันกำลังตั้งค่างานcronเพื่อรวบรวมผลลัพธ์จากตัวรวบรวมฐานข้อมูล MongoDB ฉันต้องการรวบรวมผลลัพธ์ภายใน 24 ชั่วโมง ผมวางแผนที่จะใช้Mongoคำสั่งกับจาวาสคริปต์ คำถามคือในMongo shellฉันจะเขียนแบบสอบถามเพื่อค้นหาช่วงวันที่ได้อย่างไรจาก 24 ชั่วโมงที่ผ่านมา เช่น: db.system.profile.find({ "timestamp" : { $lte : <current date & time>, $gt : <date & time 24 hrs ago> } })
15 mongodb  cron 

2
จะเริ่มต้นไฟล์ / var / lib / mysql ใหม่ได้อย่างไร?
เนื่องจากอุบัติเหตุฉันลบไดเรกทอรี / var / lib / mysql ทั้งหมด เนื่องจากฐานข้อมูลไม่ได้มีสิ่งที่สำคัญฉันไม่ต้องการผ่านความยุ่งยากในการกู้คืนจากการสำรองข้อมูลเก่า แต่สร้างโครงสร้างไดเรกทอรีแทนตั้งแต่ต้น ฉันจะทำอย่างไรโดยไม่ต้องติดตั้ง MySQL ใหม่
15 mysql  linux  debian 

2
วิธีการสำรองฐานข้อมูล MongoDB ขนาดใหญ่
วิธีที่แนะนำในการสำรองชุดข้อมูลขนาดใหญ่ใน MongoDB คืออะไร? สมมติว่าเรามีขนาดข้อมูลตามลำดับ 10TB - คุณจะสำรองข้อมูลได้อย่างไร เรากำลังพิจารณาโหนดชุดเรพลิกาที่ซ่อนอยู่อาจจะล่าช้า ความล่าช้าจะปกป้องเราจากการลดลงของฐานข้อมูลทั้งหมดโดยไม่ตั้งใจ นี่เป็นโซลูชันที่ใช้การได้และตัวเลือกอื่น ๆ ที่คุณจะแนะนำให้ตรวจสอบคืออะไร ขอบคุณ!

2
เคียวรีระยะห่างอย่างรวดเร็วขัดขวางในระดับสูงกว่า
ฉันมีฐานข้อมูลขนาดใหญ่ (แถว 16M) ที่มีแฮชการรับรู้ภาพ ฉันต้องการที่จะสามารถค้นหาแถวตามระยะทาง hammingในกรอบเวลาที่เหมาะสม ในปัจจุบันเท่าที่ฉันเข้าใจปัญหาอย่างถูกต้องแล้วฉันคิดว่าตัวเลือกที่ดีที่สุดในที่นี้คือการติดตั้ง SP-GiST แบบกำหนดเองที่ใช้BK-Treeแต่ดูเหมือนว่าจะใช้งานได้มากและฉันก็ยังคลุมเครือในทางปฏิบัติ รายละเอียดของการปรับใช้ดัชนีที่กำหนดเองอย่างเหมาะสม การคำนวณระยะทาง Hamming คือเวไนยพอและผมทำรู้ C แม้ว่า โดยพื้นฐานแล้ววิธีการที่เหมาะสมในที่นี้คืออะไร? ฉันต้องสามารถสอบถามการจับคู่ภายในระยะทางแก้ไขที่แน่นอนของแฮช ตามที่ผมเข้าใจมัน Levenshtein ระยะทางกับสตริงความยาวเท่ากันเป็นหน้าที่ hamming ระยะเพื่อให้มีอย่างน้อยบางส่วนสนับสนุนที่มีอยู่สำหรับสิ่งที่ฉันต้องการแม้ว่าจะไม่มีวิธีการที่ชัดเจนในการสร้างดัชนีจากมัน (จำค่าที่ผมสอบถาม การเปลี่ยนแปลงฉันไม่สามารถคำนวณระยะทางจากค่าคงที่ล่วงหน้าได้เนื่องจากจะมีประโยชน์สำหรับค่านั้นเท่านั้น แฮชปัจจุบันถูกเก็บเป็นสตริง 64- ถ่านที่มีการเข้ารหัส ASCII แบบไบนารีของแฮช (เช่น "10010101 ... ") แต่ฉันสามารถแปลงให้เป็น int64 ได้อย่างง่ายดาย ปัญหาจริงคือฉันต้องสามารถสืบค้นได้ค่อนข้างเร็ว ดูเหมือนว่าจะเป็นไปได้ที่จะบรรลุบางสิ่งบางอย่างตามแนวของสิ่งที่ฉันต้องการpg_trgmแต่ฉันค่อนข้างชัดเจนว่าการจับคู่ mechamism ของ trigram ทำงานอย่างไร (โดยเฉพาะการวัดความคล้ายคลึงกันที่ส่งกลับมาเป็นตัวแทนจริง ๆ )ชนิดของระยะทางแก้ไข) ประสิทธิภาพการแทรกไม่สำคัญ (ราคาแพงมากในการคำนวณแฮชสำหรับแต่ละแถว) ดังนั้นฉันจึงสนใจเกี่ยวกับการค้นหาเป็นหลัก

1
log_min_duration_statement การตั้งค่าจะถูกละเว้น
ฉันกำลังทำงานPostgresql 9.1บน Ubuntu รุ่น Postgresql ที่แน่นอน9.1+129ubuntu1เป็นตัวจัดการแพคเกจของฉันแสดง ฉันมี 2 ฐานข้อมูลที่ใช้งานอยู่และถูกใช้จากเซิร์ฟเวอร์ระยะไกล ฉันต้องการบันทึกการสืบค้นที่มีเวลาดำเนินการนาน ดังนั้นฉันจึงตั้งค่าพารามิเตอร์ต่อไปนี้ใน/etc/postgresql/9.1/main/postgresql.confไฟล์ log_min_duration_statement = 10000 log_statement = 'mod' ดังนั้น Postgresql จะบันทึกการสืบค้นที่ใช้เวลานานกว่า 10 วินาที แต่เมื่อฉันreloadกำหนดค่า postgres, Postgresql เริ่มบันทึกทุกแบบสอบถามที่เหมาะกับlog_statementค่า ที่ฉันตั้งค่าระยะเวลาเป็น 100 วินาทีเพื่อให้แน่ใจ log_min_duration_statement = 100000 แต่ Postgresql จะทำการบันทึกทุกข้อความค้นหาที่ตรงกับlog_statementค่าโดยไม่คำนึงถึงlog_min_duration_statementคุณค่า การตั้งค่าlog_statementที่จะnoneลำบากในการเข้าสู่ระบบหยุด มีบางอย่างที่ฉันพลาดเกี่ยวกับการกำหนดค่าหรือไม่

3
เลือกวันที่มีวันที่สูงสุดหรือวันที่ล่าสุด
นี่คือสองตาราง SCHOOL_STAFF SCHOOL_CODE + STAFF_TYPE_NAME + LAST_UPDATE_DATE_TIME + PERSON_ID ================================================================= ABE Principal 24-JAN-13 111222 ABE Principal 09-FEB-12 222111 คน PERSON_ID + NAME ================= 111222 ABC 222111 XYZ นี่คือแบบสอบถามออราเคิลของฉัน SELECT MAX(LAST_UPDATE_DATE_TIME) AS LAST_UPDATE, SCHOOL_CODE, PERSON_ID FROM SCHOOL_STAFF WHERE STAFF_TYPE_NAME='Principal' GROUP BY SCHOOL_CODE, PERSON_ID ORDER BY SCHOOL_CODE; ซึ่งให้ผลลัพธ์นี้ LAST_UPDATE SCHOOL_CODE PERSON_ID ===========+===========+========= …

4
การรับ SELECT เพื่อส่งคืนค่าคงที่แม้ว่าแถวศูนย์ตรงกัน
พิจารณาข้อความสั่งที่เลือกนี้: SELECT *, 1 AS query_id FROM players WHERE username='foobar'; มันจะส่งคืนคอลัมน์ที่query_idมีค่า1พร้อมกับคอลัมน์อื่น ๆ ของผู้เล่น วิธีการหนึ่งที่จะทำให้ผลตอบแทน SQL ข้างต้นอย่างน้อยquery_idของ1แม้ว่าเลือกพบว่าไม่มีแถวจับคู่? BTW คือ PostgreSQL 8.4

5
กลุ่มไฟล์หลักคือ SQL Server 2008 แบบเต็ม
ฉันมีตารางขนาดใหญ่ (~ 50 ล้านแถว) ฉันพยายามแทรกจำนวนมากลงใน SQL Server และฉันได้รับข้อผิดพลาด: ไม่สามารถจัดสรรพื้นที่สำหรับวัตถุ 'myDB' ในฐานข้อมูล 'I 3 Stroke' ได้เนื่องจากกลุ่มไฟล์ 'หลัก' เต็ม สร้างพื้นที่ดิสก์โดยการลบไฟล์ที่ไม่ต้องการวางวัตถุในกลุ่มไฟล์เพิ่มไฟล์เพิ่มเติมไปยังกลุ่มไฟล์หรือการตั้งค่าอัตโนมัติสำหรับไฟล์ที่มีอยู่ในกลุ่มไฟล์ มีตารางอื่นในฐานข้อมูลที่มีประมาณ 25 ล้านแถว ฐานข้อมูลนี้จะใช้ในเครื่องเดียวเท่านั้นและจะได้รับการออกแบบมาเพื่อขุดข้อมูลที่มีอยู่แล้วและจะไม่มีการเติบโตเกินขนาดปัจจุบัน สำหรับสถานการณ์เช่นนี้เป็นวิธีที่ดีที่สุดในการแก้ไขปัญหานี้ดังนั้น SQL Server จะไม่บ่นอะไร การแก้ปัญหาสำคัญหรือไม่ที่ฐานข้อมูลนี้จะไม่ถูกเปิดเผยต่อผู้ใช้หลายคน?

3
วิธีนับจำนวนคอลัมน์ที่แตกต่างกันในตารางเดียวกัน
ตาราง # 01 Status: StatusID Status ----------------------- 1 Opened 2 Closed 3 ReOpened 4 Pending ตารางที่ 02 Claims: ClaimID CompanyName StatusID -------------------------------------- 1 ABC 1 2 ABC 1 3 ABC 2 4 ABC 4 5 XYZ 1 6 XYZ 1 ผลลัพธ์ที่คาดหวัง: CompanyName TotalOpenClaims TotalClosedClaims TotalReOpenedClaims TotalPendingClaims -------------------------------------------------------------------------------- ABC 2 1 …
15 sql-server  pivot 

2
ฐานข้อมูล“ ตรึง” บน ALTER TABLE
สภาพแวดล้อมการผลิตของเราเพิ่งแข็ง * เช้านี้สักพักเมื่อเปลี่ยนโต๊ะเพิ่มคอลัมน์จริง การละเมิด SQL:ALTER TABLE cliente ADD COLUMN topicos character varying(20)[]; * การเข้าสู่ระบบของเราต้องเลือกจากตารางเดียวกันนั้นดังนั้นจึงไม่มีใครสามารถเข้าสู่ระบบในช่วงตารางการเปลี่ยนแปลง เราต้องฆ่ากระบวนการเพื่อให้ระบบกลับมาทำงานตามปกติ โครงสร้างตาราง: CREATE TABLE cliente ( rut character varying(30) NOT NULL, nombre character varying(150) NOT NULL, razon_social character varying(150) NOT NULL, direccion character varying(200) NOT NULL, comuna character varying(100) NOT NULL, ciudad character varying(100) NOT NULL, …

5
วิธีเพิ่มประสิทธิภาพ SELECT ช้ามากด้วย LEFT JOIN บนตารางขนาดใหญ่
ฉัน googling ให้การศึกษาด้วยตนเอง & กำลังมองหาวิธีแก้ปัญหาเป็นเวลาหลายชั่วโมง แต่ไม่มีโชค ฉันพบคำถามที่คล้ายกันสองสามข้อที่นี่ แต่ไม่ใช่กรณีนี้ ตารางของฉัน: คน (ประมาณ 10M แถว) แอตทริบิวต์ (สถานที่, อายุ, ... ) ลิงก์ (M: M) ระหว่างบุคคลและแอตทริบิวต์ (ประมาณ 40M แถว) ดัมพ์เต็ม ~ 280MB สถานการณ์: ฉันพยายามเลือกรหัสบุคคลทั้งหมด ( person_id) จากบางสถานที่ ( location.attribute_value BETWEEN 3000 AND 7000) เป็นเพศ ( gender.attribute_value = 1) เกิดในบางปี ( bornyear.attribute_value BETWEEN 1980 AND …

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