Editorial

Αγαπητές Φίλες και Αγαπητοί Φίλοι,
Η νέα χρονιά έχει ξεκινήσει και εύχομαι ολόψυχα να είναι μια καλή χρονιά για όλες και όλους, πρωτίστως με υγεία και λιγότερα προβλήματα να μας απασχολήσουν κατά την διάρκεια της.
Κάθε χρόνος που περνάει μας κάνει σοφότερους καθώς μας δίνει μαθήματα ζωής που κάποιες φορές είναι σκληρά αλλά παραμένουν μαθήματα και έτσι πρέπει να τα εκλάβουμε και να προχωρήσουμε δυνατοί. Τίποτα δεν πρέπει να μας κάνει να λυγίσουμε. Έχουμε υποχρέωση στον εαυτό μας (και σε κανέναν άλλον) να προχωρήσουμε.
Δυστυχώς η χρονιά που μας πέρασε ήταν ακόμα μια χρονιά πανδημίας και όλοι ευχόμαστε η χρονιά αυτή να σηματοδοτήσει το τέλος της. Προσωπικά είμαι αισιόδοξος για την χρονιά αυτή και πιστεύω ότι όλα θα γίνουν καλύτερα σε σχέση με τα δύο τελευταία χρόνια.
Η χρονιά αυτή για το SQLschool.gr ήταν μια αρκετά καλή χρονιά καθώς έγιναν αρκετά SQL Nights και γράφτηκαν αρκετά άρθρα. Θα ήθελα περισσότερα SQL Server in Greek επεισόδια αλλά δυστυχώς αυτό δεν μπόρεσε να γίνει.
Στο newsletter αυτό θα βρείτε όλα όσα έγιναν το 2021 ώστε αν κάτι διέφυγε της προσοχής σας να μπορείτε να το διαβάσετε ή να το δείτε.
Για το 2022 βάζουμε σαν στόχο να κάνουμε τουλάχιστον αυτά που κάνουμε όλα αυτά τα 12 χρόνια που υπάρχει το SQLschool.gr.

Καλή Χρονιά σε όλες και όλους
Αντώνιος Χατζηπαυλής

Articles 2021

Purge old Database Backup files

Όσοι κάνουν σωστά την δουλειά τους έχουν και την σωστή backup στρατηγική. Αυτό σημαίνει ότι καθημερινά δημιουργούν ένα αριθμό από backup files και φυσικά μειώνεται και ο ελεύθερος χώρος του δίσκου. Αυτό σημαίνει ότι πρέπει να δημιουργηθεί μια διαδικασία που να σβήνει τα παλιά και μη "χρήσιμα" backups...

Understanding the jobs schedule in your instance

Όλοι χρησιμοποιούμε το SQL Agent με σκοπό να προγραμματίσουμε διάφορες εργασίες που θέλουμε να εκτελούνται στο instance μας. Αυτό όμως που πρέπει να προσέξουμε είναι το πότε χρονικά θα βάλουμε κάθε μια να εκτελείται καθώς είναι σύνηθες φαινόμενο όλες να ξεκινάνε την ίδια ώρα. Δυστυχώς δεν υπάρχει κάποιο UI που να βοηθάει σε αυτό και για αυτό σας δίνω μια εκδοχή αυτού που χρησιμοποιώ για να μπορώ να έχω μια καλύτερη εικόνα των jobs και του προγραμματισμού τους.

Keep DBCC CHECKDB output and history

Η εκτέλεση της γνωστής DBCC CHECKDB είναι αυτό που πρέπει να γίνεται καθώς είναι αυτή που ελέγχει την database. Το αποτέλεσμα της είναι κάτι που πρέπει να μελετούμε σχολαστικά μετά από κάθε εκτέλεση της και σε αρκετές περιπτώσεις ίσως θα πρέπει να το συγκρίνουμε με παλαιότερες εκτελέσεις.

MSDB database needs maintenance and tunning. Don’t forget that.

Όλες οι databases που υπάρχουν μέσα σε ένα SQL Server instance χρειάζονται maintenance και tunning και δεν εξαιρούνται από αυτό οι system databases. Μία από αυτές είναι και η msdb.

Restore survivor - Restore chain explanation and restore script generation

Μια από τις γνωστότερες παροιμίες που έχουμε, λέει "των φρονίμων τα παιδιά πριν πεινάσουν μαγειρεύουν". Η ερμηνεία της παροιμίας αυτή είναι ξεκάθαρη, και αφορά το ότι πρέπει να προετοιμαζόμαστε νωρίτερα για αυτά που θα έρθουν. Ταιριάζει απόλυτα με αυτό που πρέπει ένας DBA να κάνει.

The GOTO statement in SQL Server

Το να γράψω το συγκεκριμένο άρθρο ήταν μια προσωπική πρόκληση. Είμαι σίγουρος ότι θα υπάρξουν αντιδράσεις μιας και το GOTO statement έχει εξοβελιστεί στο πυρ το εξώτερον. Όμως δεν έχω καμία διάθεση ή πρόθεση να μπω σε αυτές.

sp_indexdetails – Get index details and internals

Από τα θέματα που είναι σημαντικά και φυσικά έχουν απασχολήσει και θα συνεχίσουν να πράττουν αυτό είναι οι indexes και τα statistics αυτών. Αρκετός είναι επίσης και ο χρόνος που δαπανάμε για κάνουμε monitoring και optimizing αυτούς χρησιμοποιώντας τα εργαλεία όπως τα DMVs/DMFs.

Explain Ghost Records in SQL Server

Κάθε φορά που εκτελούνται delete operations τα rows δεν διαγράφονται άμεσα αλλά χαρακτηρίζονται σαν rows προς διαγραφή και η ονομασία που έχει δοθεί σε αυτά είναι ghost(ed) records και σε αυτό το άρθρο θα δούμε τα internals τους.

How SQL Server find free pages - The importance of Page Free Page(s) (PFS)

Συνεχίζουμε την εξερεύνηση μας στα SQL Server internals και στο άρθρο αυτό θα αναλύσουμε την Page Free Space (PFS), την χρήση της και την σημασία της σε κάθε data file που υπάρχει στην εκάστοτε database.

SQL Server Allocation Units

Συνεχίζοντας την "κατάδυση" μας στα SQL Server internals σε αυτό το άρθρο θα ασχοληθούμε με τα Allocation Units τα οποία μπορούμε να δούμε με την χρήση της DMV sys.allocation_units.

In which pages (data or index) are my table data stored?

Η γνώση των internals στο SQL Server όπως πολλές φορές έχω αναφέρει είναι σημαντική γιατί έτσι μπορείς να σχεδιάσεις καλύτερα το database schema, να γράψεις καλύτερα queries ή διαδικασίες και φυσικά να μπορείς να κάνεις καλύτερο troubleshooting. Σε αυτό το άρθρο θα κατέβουμε για τα καλά το πάτο του βαρελιού καθώς θα κατανοήσουμε το πως ο SQL Server αντιμετωπίζει αυτά που του ζητάμε.

Common Alerts that each SQL Server instance must have

Η καθημερινότητα κρύβει εκπλήξεις που θα εμφανιστούν αργότερα και τότε ίσως τα πράγματα να είναι χειρότερα από την στιγμή που η έκπληξη εμφανίστηκε για πρώτη φορά. Για αυτό κάθε DBA που μισεί τις δυσάρεστες εκπλήξεις και ιδιαίτερα αυτές που έρχονται από το παρελθόν πρέπει να κάνει με κάποιο τρόπο τον SQL Server να του μιλάει.

When Min and Max Memory have the same value things are getting worse

Το memory management αλλά και οι ρυθμίσεις για αυτό είναι από το περισσότερο σχολιασμένο θέμα στο SQL Server. Παρόλα αυτά όμως συνεχίζω να βλέπω στους διάφορους SQL Server που επισκέπτομαι ρυθμίσεις που κάνουν τα πράγματα χειρότερα από το να έχει αφήσει κάποιος τα defaults (που και αυτό δεν είναι σωστό).

Failed to generate a checkpoint in a database

Πρόσφατα κλήθηκα να διορθώσω μια corrupted database με αρκετά μεγάλο αριθμό corrupted pages. Η διαδικασία επιδιόρθωσης ήταν επίπονη και πήρε αρκετές ημέρες αλλά τελικά ολοκληρώθηκε. Με την ολοκλήρωση της διαδικασίας ζήτησα να γίνει full backup καθώς τα ήδη υπάρχοντα backups ήταν και αυτά corrupted καθώς περιείχαν τις corrupted pages. Κατά την διάρκεια του full backup όμως εμφανίστηκε ένα νέο μήνυμα λάθους που έλεγε το εξής...

What is the Lock Page in Memory, When and How I enable it

Lock Pages in Memory (LPIM) είναι η δυνατότητα που δίνεται απο τα Windows και η οποία αποτρέπει το paging της virtual memory στο δίσκο. Αυτό το επιτυχάνει καθώς "κλειδωνει" τα δεδομένα αυτά στην φυσική μνήμη και όταν υπάρχει το φαινόμενο που ονομάζουμε memory pressure αυτά δεν γίνονται paging στο δίσκο.

GREATEST() and LEAST() functions in Azure SQL Database

Μια απαίτηση αρκετών χρόνων υλοποιήθηκε μερικώς στον SQL Server καθώς αυτή την στιγμή είναι μόνο διαθέσιμη στις Azure SQL Databases και αφορά δύο T-SQL functions που υπάρχουν σε άλλα RDBMS εδώ και χρόνια.

Investigating the Cost Threshold for Parallelism value

Στο SQL Server υπάρχουν αρκετά configuration settings, ένα από αυτά είναι το Cost Threshold for Parallelism που χρειάζεται να δώσουμε προσοχή.

The WITH SCHEMABINDING option: What you are missing by not using it

Το WITH SCHEMABINDING είναι διαθέσιμο από το SQL Server 2000 αλλά η χρήση του είναι ελάχιστη με αποτέλεσμα να υπάρχουν business continuity issues αλλά και να μην εκμεταλλεύονται τα performance gains που προσφέρει σε κάποιες περιπτώσεις.

Getting client computer information from SQL Server

Όσοι γράφουμε κώδικα έχουμε σαν σκοπό να καλύπτουμε τις επιχειρηματικές ανάγκες που υπάρχουν. Αρκετές φορές σε αυτές υπάρχουν απαιτήσεις που σχετίζονται με τον client που συνδέεται στο SQL Server instance.

EXECUTE (EXEC) vs. sp_executesql

Παρατηρώ ότι αρκετοί προβληματίζονται ή έχουν μπερδευτεί για το πότε πρέπει να χρησιμοποιούν την EXECUTE (περισσότερο γνωστή με την σύντμηση της EXEC) ή την sp_executesql. Λοιπόν για να βάλουμε τα πράγματα σε σειρά.

Move object(s) to another schema

Από τον SQL Server 2005 έχουμε την ξεκάθαρη δυνατότητα χρήσης των schemas. Αν μετά από την δημιουργία του object επιθυμεί κάποιος να μεταφέρει αυτό σε άλλο schema, στο post αυτό θα διαβάζει το πως μπορεί να το κάνει.

Dynamic Data Masking

Tο Dynamic Data masking (DDM) είναι μια αναδυόμενη τεχνολογία που στοχεύει στην κάλυψη δεδομένων σε πραγματικό χρόνο (on the fly) των δεδομένων παραγωγής και αλλάζει τη ροή δεδομένων έτσι ώστε ο αιτών(Non-Privileged User) να μην έχει πρόσβαση στα ευαίσθητα δεδομένα, ενώ δεν πραγματοποιούνται φυσικές αλλαγές στα πραγματικά δεδομένα μιας παραγωγικής βάσης.

SQL Nights 2021

What's new in Azure SQL MI

Let us review the latest and the greatest investment that Microsoft has made into the Azure SQL Managed Instance, the product that serve as the best target for the existing SQL Server migration into Azure PaaS.

Optimize a model for performance in Power BI 

Σε αυτό το SQL Night μιλάμε για πως πρέπει και μπορούμε να κάνουμε optimization σε ένα Power BI Model

Working with BLOBs in SQL Server

Σε αυτό το SQL Night μιλάμε για πως μπορούμε να χρησιμοποιήσουμε BLOBs στο SQL Server

Demystifying-Power BI Datasets

When it comes to Power BI datasets, there are often many questions. Like, isn’t DirectQuery and Live Connection the same thing? What’s the difference between a local and remote model? What is chaining?

Azure SQL Database Ledger – Bringing the security of Blockchains to SQL

Azure SQL Database Ledger eliminates the additional cost, complexity, and performance overhead of decentralized Blockchains, providing integrity protection in a fully managed and familiar SQL environment. It provides strong security guarantees while maintaining the power, performance and large feature-set of Azure SQL Database. In this session, we will talk about the Ledger technology, provide use cases where it is applicable but also describe technical details about the design and the performance of the system. Join us to learn everything about this industry-first technology that was just released in Azure SQL DB!

Evaluate the configuration of your SQL Server for best practices

Σε αυτό το SQL Night μιλάμε για πως μπορούμε να ελέγχουμε το SQL Server instance μας αν ακολουθεί τα best practices.

Query Store in SQL Databases

Σε αυτό το SQL Night μιλάμε για το Query Store και πως αυτό μπορεί να χρησιμοποιηθεί στις databases.

Data Lakehouse in Azure Synapse Analytics

Σε αυτό το SQL Night μιλάμε για το τι είναι ένα Data Lakehouse και πως τα Azure Synapse Analytics μπορούν να χρησιμοποιηθούν σε αυτό.

Data Virtualization using Polybase

Σε αυτό το SQL Night μιλάμε για το πως μπορούμε να έχουμε Data Virtualization using Polybase

SQL Server in Greek episodes 2021

File system accessing from a SQL Server 2019 instance

SQL Server in Greek - Episode 26

Understanding Database Engine Errors

Σε αυτό το επεισόδιο SQL Server in Greek εξηγούμε τα database engine errors και πως μπορούμε να τα χρησιμοποιήσουμε από τις εφαρμογές μας.

Working with registry in SQL Server

In this episode you will learn how to work with registry using T-SQL

Tips 2021

Accelerate the opening of SSIS package in SSDT

When opening SSIS package, SSDT loads the package, validates it and shows you the validation results by default. To accelerate the opening of SSIS package, we enable you to skip package validation when opening the package and validate it when you want to, since SQL Server Integration Services Projects version 3.9 and SSDT for VS2017 15.9.6. Read How To

DAC - TCP 1434 port

Όπως γνωρίζουμε το Dedicated Admin Connection (DAC) είναι χρήσιμο καθώς μπορεί να μας βοηθήσει όταν όλα έχουν "κολλήσει" στο SQL Server instance. Επίσης χρήσιμο είναι να μπορούμε να κάνουμε χρήση αυτού από το pc μας και όχι αποκλειστικά με σύνδεση πάνω στον server. Για αυτό το λόγο και ενεργοποιούμε το configuration setting 'remote admin connection'. Αυτό όμως δεν φτάνει καθώς για να μπορέσουμε να συνδεθούμε θα πρέπει στο firewall να επιτρέπουμε το 1434 TCP port.

Get random rows from a table in SQL Server

Υπάρχουν περιπτώσεις που θέλουμε από ένα πίνακα να πάρουμε τυχαία κάποιες εγγραφές για να υλοποιήσουμε κάποια σενάρια ανάλυσης. Υπάρχουν κάποιες functions όπως η RAND αλλά δεν καλύπτει πάντα σωστά την ανάγκη αυτή. Ο ασφαλέστερος τρόπος που έχω βρει μέχρι τώρα καθώς κάθε φορά επιστρέφει διαφορετικό αποτέλεσμα είναι να εκτελέσουμε ένα query όπως παρακάτω στο πίνακα που μας ενδιαφέρει.

select top(10) * from schema.table order by NEWID();

SQL Server backup files extensions

Δεν υπάρχει συγκεκριμένη ντιρεκτίβα για το ποιο ή ποια θα πρέπει να είναι τα file extensions για τα backup files στον SQL Server. Μπορεί βέβαια το γραφικό περιβάλλον του SSMS να κοιτάζει για *.bak και *.trn αλλά δεν είναι υποχρεωτικά. Αυτό που οι περισσότεροι κάνουμε είναι τα full backups να έχουν *.bak file extension, τα differential *.dif, τα transactional logs *.trn, τα file/filegroup *.fil. Φυσικά ο καθένας μπορεί να χρησιμοποιήσει τα δικά του.

Moving part of code in a script to another possition

Αρκετές φορές θέλουμε να μεταφέρουμε κάποιες γραμμές κώδικα σε ένα script που γράφουμε στον SSMS από ένα σημείο σε κάποιο άλλο μέσα σε αυτό. Η πρώτη κίνηση που κάνουμε είναι copy/paste αλλά μπορούμε και αλλιώς. Απλά διαλέγουμε το τμήμα του κώδικα που θέλουμε και πατάμε Alt+Up/Down arrows για να το πάμε στο νέο σημείο.

Execution Results of DBCC CHECKDB on master database

Κάθε φορά που εκτελούμε την DBCC CHECKDB στην master database (database_id=1) γίνεται DBCC CHECKDB και στην resource database (database_id=32767) για αυτό και στο αποτέλεσμα της DBCC CHECKDB θα δείτε και τις δύο databases

Presentations 2021

Developing AI Apps using Azure Cognitive Services

Innovation for Health 2021
IEEE ENTREPRENEURSHIP WEEK 2021
Nov 13, 2021

Lambda Architecture in Azure Data Engineering

Global Azure 2021
Athens Apr 17, 2021