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

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

3
อะไรคือการใช้การกู้คืนส่วนหัวเมื่อทำการสำรองข้อมูล?
เมื่อฉันตรวจสอบการสำรองข้อมูลของฉันด้วยแบบสอบถามต่อไปนี้: SELECT command, percent_complete, 'elapsed' = total_elapsed_time / 60000.0, 'remaining' = estimated_completion_time / 60000.0 FROM sys.dm_exec_requests WHERE command like 'BACKUP%' or command like 'RESTORE%' ฉันสังเกตว่าก่อนการสำรองข้อมูล SQL Server จะทำการคืนค่าส่วนหัวจากนั้นสำรองข้อมูล ฉันสงสัยว่ามีประโยชน์อะไรกับมันบ้างและถ้าเวลาในการประมวลผลลดลงอย่างใด ดูเหมือนจะใช้เวลานานกว่าการสำรองข้อมูลจริง

3
วิธีหลีกเลี่ยงการขึ้นต่อกันแบบวนซ้ำ (การอ้างอิงแบบวงกลม) ระหว่าง 3 ตาราง?
ฉันมี 3 ตาราง: คน เสา ชอบ เมื่อฉันออกแบบโมเดล ER มันมีการพึ่งพาแบบวนรอบ: 1: N คน -------- <โพสต์ 1: N โพสต์ ---------- <ไลค์ 1: N คน -------- <ไลค์ ตรรกะคือ: 1 คนสามารถมีโพสต์ได้มากมาย 1 โพสต์มีไลค์มากมาย 1 คนสามารถชอบโพสต์จำนวนมาก (คนที่สร้างไม่สามารถถูกใจโพสต์ของเขาเอง) ฉันจะลบการออกแบบแบบวงกลมนี้ได้อย่างไร หรือการออกแบบฐานข้อมูลของฉันผิด

2
ELSE 0 บอกเป็นนัยในกรณี COUNT ของฉันเมื่อใด
ความแตกต่างระหว่างCOUNT(CASE WHEN [Column A] = ____ THEN 1 END และCOUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 ENDคืออะไร? ฉันใช้อดีตและฉันไม่ได้เห็นความแตกต่างในตอนนี้ เหตุผลในการเพิ่มELSE 0- มีสถานการณ์ที่ SQL Server จะนับอย่างไม่ถูกต้องหรือไม่

1
ไม่สามารถทำให้ SQLCMD ทำงานได้ไม่ว่าฉันจะพยายามทำอะไร
ไม่ว่าฉันจะทำอะไรฉันก็ไม่สามารถทำให้ SQLCMD ทำงานได้ ฉันพยายามเรียกใช้สคริปต์ที่มีขนาด 200mb + และไม่สามารถเรียกใช้จากแอปพลิเคชันเซิร์ฟเวอร์ sql ได้ดังนั้นฉันต้องดำเนินการผ่าน SQLCMD อย่างไรก็ตามทุกครั้งที่ฉันพยายามลงชื่อเข้าใช้หรือเรียกใช้สคริปต์สคริปต์จะปิดทันที ฉันได้ติดตามยูทิลิตี้ sqlcmd โดย msdn ฉันพยายามที่จะเปิดมันผ่านคำสั่งที่เชื่อถือได้ SQLCMD -EI รับ: Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes Provider: Could not open a connection to SQL Server [2]. . Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : …

4
FIRST () และ LAST () รุ่น SQL Server 2012 คืออะไร
ฉันมีตารางที่มีvalueคอลัมน์ ฉันต้องการคำนวณแถวสุดท้ายลบด้วยแถวแรกดังที่แสดงที่นี่: id value 1 10 2 45 3 65 4 95 . . . . . . 500 200 ฉันต้องการได้รับ 200 - 10 = 190 ฉันพยายามใช้คำสั่งด้านล่างใน SQL Server 2012 อย่างไรก็ตามLASTและFIRSTไม่ทำงาน SELECT LAST(Value) - FIRST(Value) FROM Counter; ไวยากรณ์สำหรับคำสั่งนี้ใน SQL Server คืออะไร

4
เกิดข้อผิดพลาดในการแยกวิเคราะห์ไฟล์กำหนดค่า YAML: yaml-cpp
ฉันใช้คำสั่งต่อไปนี้ (เครื่อง Windows) กับรุ่น MongoDB shell: 3.0.7: mongod --config "G:\NodeApps\mongod.cfg" --install เนื้อหาของไฟล์ mongod.cfg ได้รับด้านล่าง: systemLog: destination: file path:"G:\NodeApps\data\log" storage: dbPath:"G:\NodeApps\data" รับข้อผิดพลาดด้านล่าง: Error parsing YAML config file: yaml-cpp: error at line 4, column 8: illegal map value try 'mongod --help' for more information คำถามที่คล้ายกันไม่มีวิธีแก้ปัญหาสำหรับเรื่องนี้ สิ่งที่ฉันได้ลองไปแล้ว: ฉันใช้ช่องว่าง (ไม่ใช่แท็บ) ฉันไม่ได้ลองด้วยการบันทึกไฟล์ในรูปแบบ ASCII เนื่องจากมีการพูดถึงหนึ่งในโพสต์ที่ไม่ควรบันทึกไฟล์การตั้งค่า Mongod …

1
เป็นไปได้ไหมที่จะไม่รวมผู้ใช้บางคนในกิจกรรมการบันทึกของ PostgreSQL
ฉันต้องการตรวจสอบกิจกรรมของผู้ใช้ในฐานข้อมูลของเรา ฉันได้ตั้งค่าพารามิเตอร์ต่อไปนี้ในpostgresql.conf: log_min_duration_statement = 0 log_connections = on log_disconnections = on log_line_prefix = '%t %a %d %h %u |' อย่างไรก็ตามฉันตระหนักว่าไฟล์บันทึกส่วนใหญ่เต็มไปด้วยคำสั่งที่ดำเนินการโดยpostgresผู้ใช้ซึ่งสคริปต์ที่ฉันเขียนสำหรับงานบำรุงรักษาใช้: คำนวณมุมมอง materialized ใหม่, pg_dump, pg_restore, แยกมุมมองเป็นไฟล์ตาราง ฯลฯ ผลที่ได้คือทุกวัน ล็อกไฟล์มีขนาดเกิน 12 Mb มีวิธีในการแยกกิจกรรมของผู้ใช้ที่ระบุออกจากบันทึกหรือไม่
10 postgresql  log 

1
คอลัมน์“ อ่าน” ใน sys.dm_exec_sessions จริง ๆ บ่งชี้อะไร
นี่อาจดูเหมือนคำถามพื้นฐานมากและแน่นอนควรเป็นเช่นนั้น อย่างไรก็ตามในฐานะแฟนของวิธีการทางวิทยาศาสตร์ฉันชอบที่จะสร้างสมมติฐานแล้วทดสอบเพื่อดูว่าฉันถูกต้อง ในกรณีนี้ฉันพยายามทำความเข้าใจกับผลลัพธ์ของsys.dm_exec_sessionsและโดยเฉพาะคอลัมน์ "อ่าน" SQL Server Books Online ค่อนข้างจะระบุว่าเป็น: จำนวนการอ่านที่ดำเนินการตามคำขอในเซสชันนี้ในระหว่างเซสชันนี้ ไม่เป็นโมฆะ หนึ่งอาจสันนิษฐานว่าสิ่งนี้จะบ่งบอกถึงจำนวนหน้าอ่านจากดิสก์เพื่อตอบสนองการร้องขอที่ออกโดยเซสชั่นนี้ตั้งแต่เริ่มต้นของเซสชั่น นี่คือสมมติฐานที่ฉันคิดว่าฉันจะทดสอบ logical_readsคอลัมน์ในตารางเดียวกันกับที่มีการกำหนดเป็น: จำนวนการอ่านโลจิคัลที่ดำเนินการบนเซสชัน ไม่เป็นโมฆะ จากประสบการณ์ที่ใช้ SQL Server ผมเชื่อว่าคอลัมน์นี้สะท้อนให้เห็นถึงจำนวนของหน้าเว็บที่ได้รับการอ่านทั้งจากดิสก์และในหน่วยความจำ กล่าวอีกนัยหนึ่งจำนวนหน้าทั้งหมดที่เคยอ่านจากเซสชันไม่ว่าหน้านั้นจะอยู่ที่ใด ความแตกต่างหรือข้อเสนอคุณค่าของการมีสองคอลัมน์แยกต่างหากที่ให้ข้อมูลที่คล้ายกันดูเหมือนจะเป็นที่หนึ่งที่สามารถเข้าใจอัตราส่วนของหน้าอ่านจากดิสก์ ( reads) เทียบกับที่อ่านจากแคชแคช ( logical_reads) สำหรับเซสชั่นที่เฉพาะเจาะจง บนอุปกรณ์ทดสอบของฉันฉันได้สร้างฐานข้อมูลใหม่สร้างตารางเดียวที่มีจำนวนหน้าข้อมูลที่รู้จักแล้วอ่านตารางนั้นในเซสชันใหม่ จากนั้นฉันดูsys.dm_exec_sessionsเพื่อดูสิ่งที่readsและlogical_readsคอลัมน์พูดเกี่ยวกับเซสชัน ณ จุดนี้ฉันรู้สึกสับสนกับผลลัพธ์ บางทีบางคนที่นี่สามารถหลั่งน้ำตาให้ฉัน อุปกรณ์ทดสอบ: USE master; IF EXISTS (SELECT 1 FROM sys.databases d WHERE d.name = 'TestReads') BEGIN ALTER DATABASE …

3
แอปพลิเคชันสอบถามตารางที่ว่างเปล่า
บริษัท ของฉันใช้แอปพลิเคชันที่มีปัญหาด้านประสิทธิภาพที่สำคัญ มีปัญหาหลายอย่างเกี่ยวกับฐานข้อมูลของตัวเองซึ่งฉันกำลังอยู่ในขั้นตอนการทำงาน แต่มีปัญหามากมายที่เกี่ยวข้องกับการใช้งานอย่างแท้จริง ในการตรวจสอบของฉันฉันพบว่ามีล้านแบบสอบถามกดปุ่มฐานข้อมูล SQL Server ซึ่งแบบสอบถามตารางที่ว่างเปล่า เรามีตารางว่างเปล่าประมาณ 300 ตารางและบางตารางมีการสอบถามถึง 100-200 ครั้งต่อนาที ตารางไม่มีส่วนเกี่ยวข้องกับธุรกิจของเราและเป็นส่วนหนึ่งของแอปพลิเคชันดั้งเดิมซึ่งผู้ขายไม่ได้ลบเมื่อ บริษัท ของฉันทำสัญญาเพื่อผลิตโซลูชันซอฟต์แวร์สำหรับเรา นอกเหนือจากข้อเท็จจริงที่ว่าเราสงสัยว่าบันทึกข้อผิดพลาดแอปพลิเคชันของเรากำลังถูกน้ำท่วมด้วยข้อผิดพลาดที่เกี่ยวข้องกับปัญหานี้ผู้จัดจำหน่ายมั่นใจกับเราว่าไม่มีประสิทธิภาพหรือเสถียรภาพด้านผลกระทบสำหรับทั้งแอปพลิเคชันหรือเซิร์ฟเวอร์ฐานข้อมูล บันทึกข้อผิดพลาดมีน้ำท่วมจนเราไม่สามารถเห็นข้อผิดพลาดเกินกว่า 2 นาทีในการวินิจฉัย ค่าใช้จ่ายจริงของข้อความค้นหาเหล่านี้เห็นได้ชัดว่าอยู่ในระดับต่ำในแง่ของรอบการทำงานของ CPU เป็นต้น แต่ใครก็ตามสามารถแนะนำสิ่งที่มีผลต่อ SQL Server และแอปพลิเคชันได้บ้าง ฉันสงสัยว่ากลไกที่แท้จริงของการส่งคำขอยืนยันดำเนินการส่งคืนและยอมรับการรับแอปพลิเคชันนั้นจะส่งผลกระทบต่อประสิทธิภาพการทำงาน เราใช้ SQL Server 2008 R2, Oracle Weblogic 11g สำหรับแอป @ Frisbee- เรื่องสั้นสั้นฉันสร้างตารางที่มี querytext ซึ่งตีตารางที่ว่างเปล่าในฐานข้อมูลของแอพจากนั้นทำการสอบถามสำหรับ tablenames ทั้งหมดที่ฉันรู้ว่าว่างเปล่าและมีรายการที่ยาวมาก สิ่งที่ฮิตที่สุดคือการประหารชีวิต 2.7 ล้านครั้งในช่วงเวลา 30 วันโดยคำนึงถึงแอปที่ใช้กันทั่วไป 8 …

1
ไม่ตรงกันอย่างมากระหว่างขนาดดัชนีและจำนวนบัฟเฟอร์ในแผนการดำเนินการ
ปัญหา เรามีคำถามเช่น SELECT COUNT(1) FROM article JOIN reservation ON a_id = r_article_id WHERE r_last_modified < now() - '8 weeks'::interval AND r_group_id = 1 AND r_status = 'OPEN'; ในขณะที่หมดเวลา (หลังจากผ่านไป 10 นาที) บ่อยกว่านั้นฉันตัดสินใจตรวจสอบปัญหา EXPLAIN (ANALYZE, BUFFERS)เอาท์พุทมีลักษณะเช่นนี้ Aggregate (cost=264775.48..264775.49 rows=1 width=0) (actual time=238960.290..238960.291 rows=1 loops=1) Buffers: shared hit=200483 read=64361 dirtied=666 written=8, temp …

3
ดัชนีที่กรองจะใช้ก็ต่อเมื่อส่วนที่กรองอยู่ใน JOIN ไม่ใช่ WHERE
ฉันได้สร้างดัชนีที่กรองแล้วด้านล่าง แต่เมื่อฉันเรียกใช้ 2 คิวรีเพิ่มเติมลงดัชนีนี้จะถูกใช้สำหรับการค้นหาในตัวอย่างแรกที่มี END_DTTM ใน JOIN มากกว่าข้อที่ (นั่นคือข้อแตกต่างในแบบสอบถามเท่านั้น) . ใครช่วยอธิบายได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น การสร้างดัชนี CREATE NONCLUSTERED INDEX [ix_PATIENT_LIST_BESPOKE_LIST_ID_includes] ON [dbo].[PATIENT_LIST_BESPOKE] ( [LIST_ID] ASC, [END_DTTM] ASC ) WHERE ([END_DTTM] IS NULL) แบบสอบถาม DECLARE @LIST_ID INT = 3655 --This one seeks on the index SELECT PATIENT_LISTS.LIST_ID FROM DBO.PATIENT_LISTS LEFT JOIN DBO.PATIENT_LIST_BESPOKE ON PATIENT_LISTS.LIST_ID = …

1
แทนที่ค่าขององค์ประกอบ xml ที่พิมพ์อย่างยิ่งใน SQL Server ด้วย XQuery
ได้รับองค์ประกอบที่กำหนดไว้ภายในคอลเลกชัน XML Schema ดังกล่าว: <xsd:element name="xid"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="32" /> </xsd:restriction> </xsd:simpleType> </xsd:element> คุณจะอัพเดทองค์ประกอบโดยใช้ XQuery อย่างไร องค์ประกอบที่พบในnamespace nsในคอลเลกชันคี ฉันพยายามอัปเดตองค์ประกอบข้อความค้นหาด้านล่าง: update cm.item set data.modify( 'declare namespace ns="http://www.anon.com"; replace value of (/ns:*/ns:xid)[1] with "X00011793" cast as element(ns{http://www.anon.com}:xid,#anonymous) ?') where id = 11793 แต่สิ่งนี้สร้างข้อผิดพลาดต่อไปนี้: ข่าวสารเกี่ยวกับ 9301, ระดับ 16, สถานะ 1, บรรทัดที่ …

2
มีวิธีเพิ่มประสิทธิภาพการเรียงลำดับตามคอลัมน์ของตารางที่เข้าร่วมหรือไม่
นี่คือแบบสอบถามที่ช้าของฉัน: SELECT `products_counts`.`cid` FROM `products_counts` `products_counts` LEFT OUTER JOIN `products` `products` ON ( `products_counts`.`product_id` = `products`.`id` ) LEFT OUTER JOIN `trademarks` `trademark` ON ( `products`.`trademark_id` = `trademark`.`id` ) LEFT OUTER JOIN `suppliers` `supplier` ON ( `products_counts`.`supplier_id` = `supplier`.`id` ) WHERE `products_counts`.product_id IN (159, 572, 1075, 1102, 1145, 1162, 1660, 2355, …
10 mysql  order-by 

5
คำนวณขนาดแถวและขนาดแถวสูงสุดสำหรับตาราง
ปัญหา: มีวิธีคำนวณจำนวนไบต์ที่ใช้โดยการสร้างตารางหรือไม่ฉันรู้ว่าคุณสามารถรับข้อมูลบางอย่างจาก data_schema.tables แต่ข้อมูลนั้นไม่ถูกต้องเพียงพอ สิ่งที่จำเป็นจริง ๆ คือจำนวนไบต์ตามคำจำกัดความของตารางสำหรับinnodb เท่านั้นและการเปรียบเทียบอาจพิจารณาเป็นutf-8-general-ci ตัวอย่างเช่นการทดสอบตารางมีดังนี้ สร้างการทดสอบตาราง ( col1 varchar (25), col2 int, col3 varchar (3), col4 ถ่าน (15), col5 datetime ); ตอนนี้จะต้องทราบขนาดแถวทั้งหมดที่สามารถสะสมในหนึ่งแถวตามประเภทของคอลัมน์ในตาราง พบวิธีการแก้ปัญหาที่คล้ายกันใน MSSQL แต่ต้องการรุ่น MySQL ของมัน สคริปต์เพื่อประมาณขนาดแถวสำหรับตารางใด ๆ ความช่วยเหลือใด ๆ ที่ชื่นชมมาก

3
sql server: อัพเดทฟิลด์บนโต๊ะขนาดใหญ่ในกลุ่มเล็ก ๆ : วิธีการรับความคืบหน้า / สถานะ?
เรามีตารางที่มีขนาดใหญ่มาก (100 ล้านแถว) และเราจำเป็นต้องอัปเดตเขตข้อมูลสองสามแห่ง สำหรับบันทึกการจัดส่ง ฯลฯ เรายังต้องการเก็บไว้ในธุรกรรมที่มีขนาดพอดี ด้านล่างจะทำเคล็ดลับหรือไม่ และเราจะให้มันพิมพ์ผลงานออกมาได้อย่างไรเพื่อเราจะได้เห็นความคืบหน้า? (เราพยายามเพิ่มคำสั่ง PRINT ในนั้น แต่ไม่มีสิ่งใดถูกส่งออกในขณะที่ลูป) รหัสคือ: DECLARE @CHUNK_SIZE int SET @CHUNK_SIZE = 10000 UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or deletedDate is null WHILE @@ROWCOUNT > 0 BEGIN UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = …
10 sql-server  t-sql 

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