julax Posted January 24, 2011 Report Share Posted January 24, 2011 Καλησπέρα και πάλι...... Έχω μία βάση όπου υπάρχει ένας πίνακας με 7 εκ. εγγραφές με αποτέλεσμα η εφαρμογή που βασίζεται σ'αυτήν την ΒΔ όταν κάνει insert μία ομάδα εγγραφών να κολλά ή να αργεί πολύ. Σκέφτηκα να κάνω merge replication αλλά δεν το έχω κάνει ποτέ… Έχετε να μου προτείνετε να κάνω τίποτα άλλο δοκιμασμένο ή να προσπαθήσω να κάνω merge replication ? Link to comment Share on other sites More sharing options...
pkanavos Posted January 24, 2011 Report Share Posted January 24, 2011 Καταρχήν, το replication δεν έχει να κάνει με split αλλά με αντιγραφή των δεδομένων μίας βάσης σε κάποια άλλη. Επιπλέον, 7 εκ. εγγραφές δεν είναι πολλές. Θα πρέπει να δεις γιατί συμβαίνει η καθυστέρηση. Μήπως συμβαίνει κάτι περίεργο με τα indexes? Μήπως για παράδειγμα έχει επιλεγεί κάποιο περίεργο κλειδί ως clustered index? Πόσο μεγάλη είναι η "ομάδα εγγραφών"? Αν οι εγγραφές είναι πραγματικά πολλές, ίσως θα είναι καλύτερο να ρίξεις τα indexes που υπάρχουν όταν ξεκινάει το φόρτωμα των δεδομένων και να τα ξαναδημιουργήσεις αφού τελειώσει. Link to comment Share on other sites More sharing options...
andreasmavr Posted January 24, 2011 Report Share Posted January 24, 2011 ... Καλησπέρα σε όλους, Καταρχήν, συμφωνώ με ότι έχει αναφέρει ο κος. pkanavos. Θα πρέπει να κοιτάξεις επίσης στα settings της βάσης, το τρόπο αύξησης μεγέθους της βάσης (Autogrowth). Αν για παράδειγμα το μέγεθος της βάσης είναι 1Gb και το Autogrowth είναι 10% τότε θα κάνει expand την βάση κατά 100MB. Αν είναι 10Gb τότε θα κάνει 1GB. Καταλαβαίνεις ότι σε ένα μαζικό insert παράλληλα θα μεγαλώνει και την βάση οπότε θα καθυστερεί Ευχαριστώ, Ανδρέας Link to comment Share on other sites More sharing options...
antonch Posted January 25, 2011 Report Share Posted January 25, 2011 Καλησπέρα julax Είναι η γνωστή βάση που κοιτάζαμε την προηγούμενη φορά? Link to comment Share on other sites More sharing options...
julax Posted January 25, 2011 Author Report Share Posted January 25, 2011 Καλημέρα σε όλους και σας ευχαριστώ για τις άμεσες απαντήσεις.... Αντώνη δεν είναι η γνωστή βάση, είναι βάση που έχει το ιστορικό κινήσεων. Αγαπητέ pkanavos γνωρίζω ότι το replication έχει να κάνει με μεταφορά δεδομένων, όμως το σκέφτηκα αυτό γιατί στην εφαρμογή μπορείς να ορίσεις ποια βάση θα κοιτάει και επειδή άλλος καταχωρεί τα δεδομένα και άλλος κάνει αναζήτηση σκέφτηκα η εισαγωγή να γίνεται σε καθαρή βάση και μετά να γίνεται replication στην "γεμάτη" βάση. Απο τις σχετικά λίγες γνώσεις που έχω στις ΒΔ, θεωρώ ότι η βάση δεν είναι σχεδιασμένη καλά, δεν υπάρχουν κλειδιά ούτε σχετίζονται οι 10 πίνακες. ανέφερες "Αν οι εγγραφές είναι πραγματικά πολλές, ίσως θα είναι καλύτερο να ρίξεις τα indexes που υπάρχουν όταν ξεκινάει το φόρτωμα των δεδομένων και να τα ξαναδημιουργήσεις αφού τελειώσει. " πως το υλοποιώ στην πράξη? Link to comment Share on other sites More sharing options...
julax Posted January 26, 2011 Author Report Share Posted January 26, 2011 Μιας και δεν βρίσκω άλλη λύση μάλλον θα κάνω αυτό που ανέφερα.... έχει κανείς καμία άλλη ιδέα? Link to comment Share on other sites More sharing options...
antonch Posted January 26, 2011 Report Share Posted January 26, 2011 Δεν θα λύσεις το πρόβλημα σου με αυτό που σκέφτεσαι να κάνεις απλά θα το μεταθέσεις σε άλλη βάση, συν το γεγονός ότι θα έχεις δύο φορές το ίδιο πρόβλημα (καθυστέρησης) όταν θα κάνεις merge replication. Υποψιάζομαι ότι στο πίνακα σου έχεις σαν primary key uniqueidentifier. Αν όντως αυτό ισχύει δες το blog post μου για να καταλάβεις το πρόβλημα σου και άλλαξε το default σε αυτό που προτείνω. Αν πάλι δεν μπορείς να αλλάξεις την δομή της βάσης τότε φρόντισε να μεγαλώσεις το fillfactor στον index του primary key πχ 50%. Αυτό βέβαια θα μεγαλώσει το μέγεθος της βάσης σου αλλά θα σου λύσει το πρόβλημα performance που αντιμετωπίζεις. Link to comment Share on other sites More sharing options...
julax Posted January 27, 2011 Author Report Share Posted January 27, 2011 Ευχαριστώ Αντώνη θα το διαβάσω και επανέρχομαι..... Link to comment Share on other sites More sharing options...
julax Posted January 27, 2011 Author Report Share Posted January 27, 2011 Δυστυχώς Αντώνη ο πίνακας (βασικά όλοι οι πίνακες ) δεν έχουν κλειδιά..... απ'ότι είδα ως CLUSTERED INDEX έχει τον συνδιασμό δύο πεδίων του πίνακα το barcode και το createdate (CREATE CLUSTERED INDEX [tblHistory1] ON [dbo].[tblHistory] ( [barcodeId] ASC, [CreateDt] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] GO ). Δεν ξέρω αν θα βόλευε να παραθέσω και την δομή του πίνακα. Link to comment Share on other sites More sharing options...
julax Posted January 27, 2011 Author Report Share Posted January 27, 2011 Αν του δημιουργήσω εγώ ενα πεδίο GUID και να το θέσω ως CLUSTERED INDEX πιστεύεις ότι θα αλλάξει κάτι? Link to comment Share on other sites More sharing options...
antonch Posted January 27, 2011 Report Share Posted January 27, 2011 Μπορώ να έχω την δομή του πίνακα σε παρακαλώ Link to comment Share on other sites More sharing options...
julax Posted January 27, 2011 Author Report Share Posted January 27, 2011 Η διαδικασία που ακολουθώ είναι η εξής. Πηγαίνω στον πίνακα ή στο index δεξί κλικ Script Table As... --> New Query SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[tblHistory]( [barcodeId] [nvarchar](50) NULL, [usrId] [nvarchar](50) NULL, [ClientId] [nvarchar](50) NULL, [ProjectId] [nvarchar](50) NULL, [VoucherNum] [nvarchar](50) NULL, [ActionId] [nvarchar](50) NULL, [CreateUsrId] [nvarchar](50) NULL, [CreateDt] [datetime] NULL, [CreateTm] [datetime] NULL, [ActionType] [nvarchar](50) NULL, [barcodeType] [nvarchar](50) NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[tblHistory] ADD CONSTRAINT [DF_tblHistory_VoucherNum] DEFAULT (1) FOR [VoucherNum] GO CREATE NONCLUSTERED INDEX [iX_tblHistory] ON [dbo].[tblHistory] ( [barcodeId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] GO CREATE NONCLUSTERED INDEX [iX_tblHistory_1] ON [dbo].[tblHistory] ( [CreateDt] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] GO CREATE CLUSTERED INDEX [tblHistory1] ON [dbo].[tblHistory] ( [barcodeId] ASC, [CreateDt] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] GO Έχει Statistics και Constaints, μήπως θέλεις να παραθέσω και αυτά? Link to comment Share on other sites More sharing options...
antonch Posted January 27, 2011 Report Share Posted January 27, 2011 Ωραία δώσε το αποτέλεσμα από αυτό use go select a.type_desc,a.is_percent_growth,a.growth,a.size,a.max_sizefrom sys.database_files a go Link to comment Share on other sites More sharing options...
julax Posted January 27, 2011 Author Report Share Posted January 27, 2011 όπου a βάζω την ΒΔ ? γιατί μου βγάζει σφάλμα. Invalid object name 'sys.database_files'. Link to comment Share on other sites More sharing options...
antonch Posted January 27, 2011 Report Share Posted January 27, 2011 ακριβως όπου βάζεις το όνομα της βάσης σου Link to comment Share on other sites More sharing options...
julax Posted January 27, 2011 Author Report Share Posted January 27, 2011 Αυτό το έκανα αλλα μου βγάζει το παραπάνω σφάλμα. Link to comment Share on other sites More sharing options...
antonch Posted January 27, 2011 Report Share Posted January 27, 2011 τι έκδοση του sql server έχεις θύμισε μου Link to comment Share on other sites More sharing options...
julax Posted January 27, 2011 Author Report Share Posted January 27, 2011 Επειδή είναι παλεά, αν θυμάμαι καλά είναι σε 2000 περίμενε να το επιβεβαιώσω Link to comment Share on other sites More sharing options...
julax Posted January 27, 2011 Author Report Share Posted January 27, 2011 Σε 2000, μιας και προσπαθώ να γίνω DBA με ποια εντολή βλέπω την έκδοση της βάσης? Link to comment Share on other sites More sharing options...
antonch Posted January 27, 2011 Report Share Posted January 27, 2011 SELECT @@VERSION Link to comment Share on other sites More sharing options...
julax Posted January 27, 2011 Author Report Share Posted January 27, 2011 Ευχαριστώ, πολύ χρήσιμο. είναι σε 2000 η ΒΔ. Link to comment Share on other sites More sharing options...
antonch Posted January 27, 2011 Report Share Posted January 27, 2011 Σου προτείνω για να λύσεις το πρόβλημα σου να κάνεις τα εξής Αν η βάση σου είναι auto shrink να το βγάλεις Να γίνει γεναιόδωρος με το πόσο αυξάνει το μέγεθος της βάσης σου τόσο στο data file όσο και στο log file (πάνω από 30%) Να αυξήσεις αλλάξεις το fill factor στον cluster index, από 90 που είναι αυτή την στιγμή σε 60. Link to comment Share on other sites More sharing options...
julax Posted January 27, 2011 Author Report Share Posted January 27, 2011 To εκανα στην demo βαση, τώρα πρέπει να το δοκιμάσω σε κατάσταση παραγωγής και το πρωί επανέρχομαι για να εκθέσω τα αποτελέσματα. Ευχαριστώ που βοηθάς παντα. Link to comment Share on other sites More sharing options...
julax Posted January 27, 2011 Author Report Share Posted January 27, 2011 To έκανα και σαφώς λειτούργησε πολύ καλύτερα η εφαρμογή, έτρεξα το Profiler και παρατήρησα ότι εκτελείται μία εντολή την οποία που δεν γνωρίζω την χρησιμότητα, η εντολή είναι η εξής select 504,c.name,c.description,c.definition from master.dbo.syscharsets c where c.id = convert(tinyint, databasepropertyex ( db_name() , 'sqlcharset') Γνωρίζει κανείς τι κάνει αυτή η εντολή ? Link to comment Share on other sites More sharing options...
antonch Posted January 28, 2011 Report Share Posted January 28, 2011 Έχεις εγκατεστημένο Site Server; Link to comment Share on other sites More sharing options...
Recommended Posts