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

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

2
คำถามการสำรอง / กู้คืนฐานข้อมูล 10 TB
เรามีฐานข้อมูลการผลิตขนาดใหญ่มากซึ่งมีขนาด 10 TB เรากำลังพิจารณาโยกย้ายไปยังบริการคลาวด์ แต่ฉันต้องเข้าใจความเสี่ยงและประเมินระยะเวลาของกระบวนการทั้งหมด ฉันสำรองฐานข้อมูลหนึ่งครั้งต่อเดือนโดยใช้โซลูชันการสำรองข้อมูล Native SQL Server 2014 SP2 ระยะเวลาเกือบ 720 นาที - 12 ชั่วโมง อัตราส่วนการบีบอัดคือ 5 หมายถึงขนาดสำรองเกือบ 2 TB เราไม่สามารถทำสำเนาสำรองที่แตกต่างกันได้เนื่องจากสะสมสิ่งเหล่านี้ใช้เวลาและพื้นที่มากเท่ากับ Full ดังนั้นเราจึงทำการสำรองข้อมูล T-log (ประมาณ 200 Mb ต่อครั้ง) แทนทุก ๆ 10 นาที ~ 144 ไฟล์ต่อวัน คำถามบิ๊กกำลังมีสถิติเหล่านี้ไม่มีใครมีความคิดใด ๆ ว่าต้องใช้เวลานานเท่าใดในการกู้คืนข้อมูลสำรอง 2 TB ที่มีข้อมูล 10 TB มันจะนานกว่าระยะเวลาการสำรองข้อมูลทั้งหมดหรือไม่

1
ประโยชน์ของการใช้ WITH TABLOCK บน INSERT
ในบางกรณีการทำINSERT INTO <tablename> (WITH TABLOCK)จะเร็วขึ้นเนื่องจากการบันทึกขั้นต่ำ สถานการณ์เหล่านั้นรวมถึงการมีฐานข้อมูลในBULK_LOGGEDรูปแบบการกู้คืน มีประโยชน์ด้านประสิทธิภาพที่เป็นไปได้อื่น ๆ ที่จะใช้WITH TABLOCKในINSERTตารางว่างเปล่าเมื่อฐานข้อมูล ( tempdb ) กำลังใช้SIMPLEโมเดลการกู้คืนหรือไม่? ฉันทำงานกับ SQL Server 2012 Standard Edition กรณีการใช้งานของฉันใช้สำหรับการสร้างและจากนั้นสร้างตารางชั่วคราวภายในโพรซีเดอร์ที่เก็บไว้โดยใช้INSERT...SELECT, ซึ่งอาจมีแถวได้มากถึงสองสามล้านแถว ฉันพยายามหลีกเลี่ยงการใช้tempdb ในทางที่ผิด แต่บางครั้งก็จำเป็น TABLOCKฉันพยายามที่จะสร้างกรณีที่จะต้องใช้ ดูเหมือนว่ามันจะไม่ทำร้ายอะไรและอาจมีประโยชน์ ฉันพยายามที่จะคิดออกว่ามีประโยชน์พอที่จะเพิ่มได้ทุกที่ในฐานรหัสของเราหรือไม่ซึ่งฉันแน่ใจว่าไม่มีกระบวนการอื่นที่ต้องการเขียนลงในตาราง ฉันมักจะแทรกลงในตารางชั่วคราวที่สร้างขึ้นใหม่ด้วย PK แบบคลัสเตอร์ แต่บางครั้งก็ใช้กอง

1
datetime2 (0) vs datetime2 (2)
ตามเอกสารdatetime2 (Transact-SQL) : ขนาดหน่วยเก็บข้อมูล 6 ไบต์สำหรับ precisions น้อยกว่า 3 7 ไบต์สำหรับ precensions 3 และ 4 ข้อกำหนด อื่น ๆ ทั้งหมดต้องการ 8 ไบต์ ขนาดของdatetime2(0), datetime2(1), datetime2(2)ใช้เงินเดียวกันของการจัดเก็บ (6 bytes) ฉันจะถูกต้องหรือไม่ในการบอกว่าฉันอาจไปด้วยdatetime2(2)และได้รับประโยชน์จากความแม่นยำโดยไม่มีค่าใช้จ่ายเพิ่มเติม โปรดทราบ: คอลัมน์นี้ถูกทำดัชนีด้วย PK เพื่อจัดทำดัชนีแบบคลัสเตอร์ผสม (ใช้สำหรับการแบ่งตาราง) ฉันไม่สนใจเกี่ยวกับมิลลิวินาที จะdatetime2(0)เป็นซีพียูที่มีประสิทธิภาพเมื่อใช้ในประโยคหรือเมื่อแสวงหาผ่านดัชนี? นี่เป็นตารางขนาดใหญ่ดังนั้นการเพิ่มประสิทธิภาพขนาดเล็กที่สุดจะสร้างความแตกต่างอย่างมาก

2
ทำไมดัชนีของฉันไม่ถูกใช้ใน SELECT TOP?
นี่คือการทำงานที่ลดลง: ฉันกำลังทำแบบสอบถามเลือก ทุกคอลัมน์ในWHEREและส่วนORDER BYคำสั่งจะอยู่ในดัชนีที่ไม่ใช่คลัสเตอร์IX_MachineryId_DateRecordedเดียวซึ่งเป็นส่วนหนึ่งของคีย์หรือเป็นINCLUDEคอลัมน์ ฉันกำลังเลือกคอลัมน์ทั้งหมดเพื่อที่จะส่งผลให้มีการค้นหาบุ๊กมาร์ก แต่ฉันกำลังทำอยู่TOP (1)ดังนั้นเซิร์ฟเวอร์จึงสามารถบอกได้ว่าการค้นหาจำเป็นต้องทำเพียงครั้งเดียวในตอนท้าย สิ่งสำคัญที่สุดคือเมื่อฉันบังคับให้แบบสอบถามใช้ดัชนีIX_MachineryId_DateRecordedมันจะทำงานในเวลาน้อยกว่าหนึ่งวินาที ถ้าฉันปล่อยให้เซิร์ฟเวอร์ตัดสินใจว่าจะใช้ดัชนีใดมันจะเลือกIX_MachineryIdและใช้เวลาประมาณหนึ่งนาที ที่แนะนำให้ฉันจริง ๆ ว่าฉันได้ทำดัชนีถูกต้องและเซิร์ฟเวอร์เพิ่งตัดสินใจไม่ถูกต้อง ทำไม? CREATE TABLE [dbo].[MachineryReading] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Location] [sys].[geometry] NULL, [Latitude] FLOAT (53) NOT NULL, [Longitude] FLOAT (53) NOT NULL, [Altitude] FLOAT (53) NULL, [Odometer] INT NULL, [Speed] FLOAT (53) NULL, [BatteryLevel] INT …

1
ค่าใช้จ่ายสำหรับ varchar (n) คืออะไร?
ฉันต้องการถามถึงความหมายของส่วนนี้จากPostgres docเกี่ยวกับvarchar(n)ประเภท: ความต้องการพื้นที่เก็บข้อมูลสำหรับสตริงสั้น (สูงสุด 126 ไบต์) คือ 1 ไบต์บวกกับสตริงจริงซึ่งรวมถึงการเว้นวรรคเว้นวรรคในกรณีของอักขระ สตริงที่ยาวกว่ามี 4 ไบต์ของค่าใช้จ่ายแทน 1 สมมติว่าฉันมีvarchar(255)ทุ่งนา และตอนนี้คำสั่งต่อไปนี้: หากฟิลด์นี้มีสตริง 10 ไบต์ค่าใช้จ่ายอยู่ที่ 1 ไบต์ ดังนั้นสตริงจะใช้ 11 ไบต์ ถ้าเขตข้อมูลถือสตริงที่ใช้ 140 ไบต์ค่าใช้จ่ายอยู่ที่ 4 ไบต์ ดังนั้นสตริงจะใช้ 144 ไบต์ ข้อความข้างต้นเป็นจริงหรือไม่? ที่นี่มีคนเข้าใจเอกสารเช่นเดียวกับผม แต่ที่นี่มีคนระบุค่าใช้จ่ายอยู่เสมอ 4 ไบต์ที่นี่ ?

1
ดัชนีไม่ได้ใช้กับ `= any () 'แต่ใช้กับ` in'
ตารางtมีสองดัชนี: create table t (a int, b int); create type int_pair as (a int, b int); create index t_row_idx on t (((a,b)::int_pair)); create index t_a_b_idx on t (a,b); insert into t (a,b) select i, i from generate_series(1, 100000) g(i) ; ไม่มีการใช้ดัชนีกับanyผู้ประกอบการ: explain analyze select * from t where (a,b) = …

2
เหตุใดคอลัมน์ที่คำนวณเป็นค่า NULL จึงไม่สามารถเรียกดูได้ในมุมมอง
ฉันมีโต๊ะ: CREATE TABLE [dbo].[Realty]( [Id] [int] IDENTITY(1,1) NOT NULL, [RankingBonus] [int] NOT NULL, [Ranking] AS ([Id]+[RankingBonus]) PERSISTED NOT NULL .... ) และมุมมอง: CREATE View [dbo].[FilteredRealty] AS SELECT realty.Id as realtyId, ... COALESCE(realty.Wgs84X, ruian_cobce.Wgs84X, ruian_obec.Wgs84X) as Wgs84X, COALESCE(realty.Wgs84Y, ruian_cobce.Wgs84Y, ruian_obec.Wgs84Y) as Wgs84Y, realty.Ranking, ... FROM realty JOIN Category ON realty.CategoryId = …

1
ข้อ จำกัด ที่ไม่ซ้ำกับช่วงวันที่
พิจารณาpricesตารางที่มีคอลัมน์เหล่านี้: id integer primary key product_id integer -- foreign key start_date date not null end_date date not null quantity integer price numeric ฉันต้องการให้ฐานข้อมูลบังคับใช้กฎว่าผลิตภัณฑ์หนึ่ง ๆ สามารถมีราคาหนึ่งรายการในปริมาณเฉพาะในช่วงวันที่ (ผ่านwhere <date> BETWEEN start_date AND end_date) ข้อ จำกัด ประเภทนี้เป็นไปได้หรือไม่

1
ทำความเข้าใจกับระบบการแจ้งเตือน
ฉันค้นหาวิธีการสร้างระบบการแจ้งเตือนใน SE และที่อื่น ๆ และพบว่าตัวเองถูกดึงไปยังโซลูชันที่เป็นคำตอบที่ยอมรับได้ที่นี่: /programming/9735578/building-a-notification-system ซึ่งใช้ โครงสร้างนี้: ╔═════════════╗ ╔═══════════════════╗ ╔════════════════════╗ ║notification ║ ║notification_object║ ║notification_change ║ ╟─────────────╢ ╟───────────────────╢ ╟────────────────────╢ ║ID ║—1:n—→║ID ║—1:n—→║ID ║ ║userID ║ ║notificationID ║ ║notificationObjectID║ ╚═════════════╝ ║object ║ ║verb ║ ╚═══════════════════╝ ║actor ║ ╚════════════════════╝ การแจ้งเตือนเกี่ยวกับบางสิ่งบางอย่าง (object = event, มิตรภาพ .. ) กำลังถูกเปลี่ยนแปลง (กริยา = เพิ่ม, ขอ .. …

5
SQL Server Isnull ส่งคืน 1900-01-01 เมื่อเขตข้อมูลเป็นศูนย์
โค้ดต่อไปนี้จะคืนค่า 1900-01-01 เมื่อฟิลด์ DOB เป็นโมฆะ ฉันต้องการ (และคาดว่า) มันจะคืนค่าสตริงว่าง ('') แต่ไม่ใช่ ฉันจะดำเนินการเพื่อให้ได้ผลลัพธ์ที่ต้องการได้อย่างไร isnull(convert(date,DOB,1),'')

7
รับการสำรองข้อมูลเต็มรูปแบบครั้งล่าสุดและการสำรองข้อมูลบันทึกธุรกรรมสำหรับแต่ละฐานข้อมูล
วิธีเขียนสคริปต์หรือแบบสอบถามที่จะแสดงการสำรองข้อมูลเต็มรูปแบบล่าสุดและสำรองข้อมูลบันทึกล่าสุดสำหรับแต่ละฐานข้อมูลในแต่ละเซิร์ฟเวอร์ที่ใช้งานจริงโดยใช้ตารางระบบ "backupset" และตารางสำรองข้อมูลที่เกี่ยวข้อง
15 sql-server 

2
PostGIS กับ SQL Server สำหรับข้อมูล GIS
ดังนั้นเมื่อเร็ว ๆ นี้ฉันเริ่มที่ บริษัท ใหม่และมีผู้ใช้ ArcGIS จำนวนมากที่ดูเหมือนจะกระตือรือร้นที่จะก้าวไปข้างหน้าด้วยอินสแตนซ์ PostGIS เพื่อให้บริการข้อมูลแก่ลูกค้าของเรา ในขณะที่ฉันไม่มีปัญหากับสิ่งนี้เราเป็นเซิร์ฟเวอร์ SQL 95% และร้านออราเคิล 5% GIS ภายในของเราในปัจจุบันหมดลง SQL Server และฉันยังไม่ได้ยินคำร้องเรียนใด ๆ ฉันรู้ว่า SQL Server มีความสามารถเชิงพื้นที่ / รูปทรงเรขาคณิตที่ปรับปรุงใหม่จำนวนมากในปี 2012 แต่มีคุณสมบัตินักฆ่าใน PostGIS ที่คุ้มค่าที่จะเจาะเข้าสู่แพลตฟอร์มใหม่ใช่หรือไม่ ฉันพยายามค้นคว้าแล้ว แต่ไม่สามารถค้นพบสิ่งใดในเชิงลึกอย่างแท้จริงหรือไม่ได้มีอคติอย่างสมบูรณ์ ฉันต้องการให้เครื่องมือที่ดีที่สุดแก่พวกเขาในการทำงานให้เสร็จ แต่ต้องชั่งน้ำหนักความจริงที่ว่าฉันจะเรียนรู้ Postgres / GIS ตั้งแต่เริ่มต้นและนั่นเป็นการเดินทางทั้งในและของตัวเอง

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

3
คัดลอกจากตาราง MySQL หนึ่งไปยังอีกตาราง MySQL ของฐานข้อมูลเดียวกัน
ฉันมีประมาณ 40 ล้านแถวในตาราง MySQL และฉันต้องการคัดลอกตารางนี้ไปยังตารางอื่นในฐานข้อมูลเดียวกัน วิธีที่มีประสิทธิภาพที่สุดในการทำเช่นนี้คืออะไร? ใช้เวลานานเท่าไร (ประมาณ)

3
ประเภทคอลัมน์ UUID ที่มีประสิทธิภาพที่สุดคืออะไร
สำหรับการจัดเก็บ UUID 128 บิตมีตัวเลือกการจัดเก็บหลายตัว: คอลัมน์ไบต์ [16] สองคอลัมน์ใหญ่ / ยาว (64 บิต) คอลัมน์ CHAR (36) - เลขฐานสิบหก 32 หลัก + 4 ขีด คอลัมน์เฉพาะฐานข้อมูล UUID หาก db สนับสนุน จากมุมมองของการจัดทำดัชนีซึ่งมีประสิทธิภาพมากที่สุด? หาก db ไม่รองรับ uuid ชนิดเฉพาะที่ 1, 2, 3 เป็นตัวเลือกที่ดีที่สุด?

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