Blog

[Video] Office Hours at the Petit Ermitage in LA

Videos
4 Comments

I went to LA for the opening week of Somni, a gorgeous restaurant in LA, and took your questions from the rooftop deck of the adorable Petit Ermitage hotel.

 

Here’s what we covered:

  • 00:00 Start
  • 00:37 MyTeaGotCold: When was the last time you did something interesting with Extended Events?
  • 01:25 Josef: Our app slows under heavy load, but Task Manager shows no high CPU/memory on the DB server. Suspect network issues or heavy disk reads by SQL Server. How can I identify the root cause? Which First Responder Kit stored procedures should I use first?
  • 02:17 Josef: When I have a SQL-related doubt, should I post it on the First Responder Kit Slack channel first, or directly on Pollgab? What’s the preferred approach?
  • 03:12 Dopinder: What is your opinion of the GIT support added to SSMS 21? Will this finally open the SQL source control flood gates?
  • 04:27 Jerry Mathers: What is your favorite query editor / management tool for PostgreSQL? How does it compare with SSMS?
  • 05:28 Venkat: Once SQL Server is out of support but still used, is there any incentive to pay for licensing?
  • 06:09 da5fx: Hi Brent, recently I was reviewing several SQL Server that have non critical (Dev and Test) users database on aws network file share servers. https://aws.amazon.com/blogs/moderniz…. What’s your opinion?
  • 06:50 TeaBA: You recently talked about what a bad idea it was to have linked servers pointing to themselves.Is the memory used by a linked server query part of the buffer pool or does it use another pool? If so, which pool is it? Trying to prove with metrics to customer what a bad idea it is.
  • 08:05 Josef: You often say not to RDP into the SQL Server machine. What’s the best alternative? Do you use SSMS from another machine to connect? Are there any valid reasons to RDP into the SQL Server machine?
  • 09:10 Juan Pablo Gallardo: Im usually listening to your videos using a headphone, while doing something else. I have heard so many things that now I need to go back and have no clue where to search. Please, could there be just a page with a transcript and a video reference so that we can search? please!?
  • 10:35 Bandhu: Will we see an office hours from scenic China in the near future?
  • 11:29 AutofileDAB: Experiencing performance issues on a SQL instance with way too many indexes, unused indexes, redundant indexes, bad database design, bad query design, etc. How do you handle customers who insist that the instance needs to be tuned but won’t change the database design or queries?

Who’s Hiring in the Microsoft Data Platform Community? December 2024 Edition

Who's Hiring
1 Comment

Is your company hiring for a database position as of December 2024? Do you wanna work with the kinds of people who read this blog? Let’s set up some rapid networking here.

If your company is hiring, leave a comment. The rules:

  • Your comment must include the job title, and either a link to the full job description, or the text of it. It doesn’t have to be a SQL Server DBA job, but it does have to be related to databases. (We get a pretty broad readership here – it can be any database.)
  • An email address to send resumes, or a link to the application process – if I were you, I’d put an email address because you may want to know that applicants are readers here, because they might be more qualified than the applicants you regularly get.
  • Please state the location and include REMOTE and/or VISA when that sort of candidate is welcome. When remote work is not an option, include ONSITE.
  • Please only post if you personally are part of the hiring company—no recruiting firms or job boards. Only one post per company. If it isn’t a household name, please explain what your company does.
  • Commenters: please don’t reply to job posts to complain about something. It’s off topic here.
  • Readers: please only email if you are personally interested in the job.

If your comment isn’t relevant or smells fishy, I’ll delete it. If you have questions about why your comment got deleted, or how to maximize the effectiveness of your comment, contact me.

Each month, I publish a new post in the Who’s Hiring category here so y’all can get the latest opportunities.


[Video] Office Hours: Car in the Dining Room Edition

Videos
0

What, doesn’t everyone park a convertible in their dining room? I address the pink elephant in the room, and then take your top-voted questions from https://pollgab.com/room/brento.

Here’s what we covered:

  • 00:00 Start
  • 01:03 MyTeaGotCold: Have you ever had a client turn off RCSI?
  • 01:31 SportsFan101: Hi! My company uses vmware for production(on-prem). Current wait time for new VM is about 1 month(from request to SQL Server installed/configured). How are enterprise companies deploying new SQL Server VMs? Docker images? Vmware Vapp?
  • 02:23 Blue Falcon: Should new SQL tables always be built with compression enabled? What are your pros / cons for compression?
  • 03:33 Sierra117: Ever had a client make you take their security courses (spam email, don’t click on links you don’t know, how to spot generative AI, etc.)? I hate them. But I do bill the clients 5x time it takes to complete them. If you make me go through hell… Least I’m getting paid.
  • 04:28 DataGuy: You work for a large company and are doing all greenfield development on brand new, isolated SQL clusters. What are you putting your foot down with devs to promote scalability? No ORDER BYs? No triggers (with business logic)? No long running queries? No SQL Agent jobs?
  • 06:03 DavDBA: Hi Brent, My app’s not parameterizing queries, leading to duplicate plans in cache and Forced parameterization worries me due to sniffing. If I fix some queries to use params, will it cut duplicates, or will other unparametrized queries still clog cache? Thanks!
  • 06:55 JC: Hey Brent – what are your thoughts about hosting an enterprise SQL Server environment on Citrix XenServer as the VM Hypervisor host?
  • 08:15 VegasDBA: Hey Brent! I set up a distributed AG to a reporting server and when I change a certain proc on that reporting server from linked server to cross DB connections, the query runs forever. A single table with 1.7m rows is the culprit. LS: 6s. XDB: never finishes. No errors.
  • 08:52 Dynomutt: How does PostgreSQL query tuning compare with SQL Server query tuning?
  • 09:39 Josef: Should backups be stored on a separate network drive rather than the SAN used for the databases in an SQL Server failover cluster? What are the pros and cons of this approach?
  • 10:54 chris: Hi Brent. For setting max mem you suggest leaving 4GB or 10% (whichever is more) for the OS. Can you help me understand why more memory is needed for the OS as you scale up the RAM? For example, with 200GB of RAM why would one need 20GB reserved for the OS instead of just 4GB?
  • 12:21 MustangKirby: Loading a table with 93M records. There is a check constraint enforced by a UDF which includes data access so it’s slow. I can disable the constraint but then it takes forever to make it trusted again. Is there a way to directly update is_not_trusted in sys.check_constraints?
  • 13:43 SportsFan101: Just wanted to say, that I’m a big fan of your training courses! Anyone on the fence about purchasing them should just treat themselves to an early Christmas present!
  • 14:14 Josef: Is it safe to change a database’s compatibility level from SQL Server 2008 (100) to SQL Server 2022 (160)? Could this change improve performance, or should I be cautious about potential issues with queries or features?
  • 14:58 Dopinder: Currently on Azure SQL 2019 VM. What are your pros / cons of upgrading to SQL 2022 vs waiting for SQL 2025?
  • 16:23 SQL_Linux: Do you cover how to use extended events to find low performance or problematic queries in your courses?

Making Your Learning Plan for 2025

Conferences and Classes
2 Comments

This week is my annual Black Friday sale, and over and over, folks buy the Fundamentals & Mastering Bundle because it’s such a good deal.

But then they let it sit in their accounts.

Time flies by, and next thing you know, an entire year has gone by and they haven’t watched any of the videos. So, with that in mind, here’s a planning guide to help you understand what you need to budget for time, and what you’re going to learn month by month.

That’s 11 straight months of training, without a month off or a break. Honestly, it’s hard to knock out 98 hours of videos in a single year while you’re still doing your job. That’s over 8 hours of videos per month on average, not including bio breaks or time for you to do the labs!

Now you start to see why
you gotta make a plan.

Every year – every single year – I get a flood of emails in October and November that all say, “Brent, life got in the way, and I just need another week to finish all of the classes. Can you extend my training by a week?” And that’s simply not realistic, because if you mainline Red Bull and prop your eyelids open with toothpicks, you’re not really going to absorb the training material. It’s just too hard.

So you either gotta make a plan and set aside a couple of afternoons every month, or plan ahead and buy the Lifetime bundle for $1,795. That way you can take your time, and if life interrupts you for a month or two, you don’t fall too far behind. Plus, you can revisit the material over and over for years – and trust me, you will. I hear from students all the time that they jump back to a particular module when they’re facing an unusual problem at work.

Let’s make 2025 the year that you really amp your skills up.


[Video] Office Hours: Ask Me Database Questions

Videos
0

I took your top-voted questions from https://pollgab.com/room/brento. At one point, my camera overheats – hang in there, I get it fixed in a few seconds.

Here’s what we discussed:

  • 00:00 Start
  • 01:59 MyTeaGotCold: Your HA/DR worksheet mentions a $1,000,000 option for 0/0 RTO/RPO. Where can I learn more about how this?
  • 04:43 Trushit: It was good to see you at PASS. What is one things that you learned at PASS that made you go “that sounds cool!”? Anything interesting you want to share about PASS?
  • 05:19 UserName Fabricated: Hi Brent, Have you done much performance work with the Fabric Data Warehouse? I’ve seen some articles that suggest you cannot create indexes and cannot see execution plans. Does this mean performance is so good that they are not required?
  • 06:15 Jack: Hi Brent, I’ve changed the fill factor on a 40m row table from 90% to 100%. After rebuilding the indexes, the table size got bigger when I was expecting it to be smaller. Is there a reason for this? Thanks
  • 07:18 Bandhu: We don’t have a dev SQL Server (Azure SQL VM) with customer data so the engineers code and test on production SQL server with live customer data. Customer data not allowed outside of production. What bad stuff have you seen from this scenario? Any recommendations?
  • 08:14 Luis C.: Hi Brent. In what scenario is it recommended to deploy more than one instance of SQL Server in a production environment? How are resource conflicts such as CPU, I/O access, and network bottlenecks handled? Regards.
  • 09:15 Elijah: There are hundreds to thousands of applicants for the positions I find on LinkedIn. How would you recommend getting a new role in this market? I have 5 years of MSSQL experience, 2 of those include Aurora work, and am looking for development (not production DBA) related roles.
  • 11:23 Lewis Hamilton: Hi Brent, have you considered doing a podcast for office hours?
  • 12:21 Jessica: When you were in Iceland on the Digital Nomad Visa, did you have any issues with language barriers?
  • 13:49 rlidzydba: Hello Brent. I have an extended event to capture information about failed login attempts. I want to have an alert fire a job, but I am finding the data isn’t in the extended event file when the job runs. What is the expected delay after a failed login occurs?
  • 14:47 DBA_Veil: Hey, Brent. Wondering about linked servers to created to themselves. SrvA would have linked server SrvA. If the local linked server does exist and someone queries it, does that process go out the network and back or is SQL smart enough to stay local? Asking for a developer…
  • 16:03 Yoga_Blocks: Hey Brent, I’m a new hire (Dev role) at a medium sized company. We don’t anonymize customer data for our dev server. Does the push to do some come from or from security, or compliance? Is it my responsibility to bring this to management’s attention?
  • 23:16 SportsFan101: Whats the current best practice for creating a dev environment or getting dev’s access to test data? Our Dev’s laptops have more resources than our current dev server.
  • 25:14 I’m a potato ?: Hi Brent. I’m trying to reduce disk latency, specifically, tempdb files are 255 Avg Write Stall (ms). I’ve seen that you can move tempdb to a local SSD/ephemeral disk. Can you use it in a virtualize envelopment with Live migration/vMotion enabled?

Updated Training Modules for SQL Server 2019 & 2022

Execution Plans
2 Comments

At the PASS Summit this month, I presented a 1-day workshop called T-SQL Tuning for SQL Server 2019 & 2022. I just took that material and refactored it into a few different modules for various classes:

  • Mastering Server Tuning – Why Query Monitoring is Hard Now – because I see so many people making bad decisions based on the output of sp_BlitzCache, Query Store, and 3rd party monitoring tools.
  • Mastering Query Tuning – T-SQL Tuning Speed Hacks for the Year 2025 – simple default options to use for databases that you’re actively tuning.
  • Fundamentals of Query Tuning – Using AI for Query Tuning – in the year 2025, this won’t work as well as it looks in the ads, and I explain why, plus show how ways that I successfully use it today.
  • Fundamentals of Query Tuning – Recap & Next Steps – I often refer to my work as being like a carpenter with a bunch of tools laid out in front of me. I cover the different tools at a very high level, including the order in which you should use ’em.

There are more modules to come, but I wanted to get these out the door quickly so that folks whose memberships expire this month can still sneak in. Those of y’all whose Black Friday bundles are renewing will get even more over the next couple of months. Enjoy!


3 Legit Signs It’s Time for Enterprise Edition

SQL Server
7 Comments

Your app is happily humming along on SQL Server Standard Edition. Things are quiet – too quiet. You’re wondering what you’re missing, and whether you should be on SQL Server Enterprise Edition. Here are 3 warning signs to watch out for.

Developers say, “Any downtime is unacceptable.”

Sure, everybody loves to say that before they realize the cost involved, but some databases really are mission-critical. If your devs say things like, “We need to add an index, but we can’t because that process locks the table for too long,” then it’s time to start leveling up your infrastructure.

The first line of defense is to schedule maintenance tasks after hours and weekends, and for most businesses, that’s enough. Eventually, if your workload becomes 24/7, then the next task is to amp up your hardware to knock out maintenance tasks in less time. The next resort is to start peeling back the level of index maintenance tasks – after all, you probably don’t need to be rebuilding them as often.

But when all else fails, Enterprise Edition adds the ability to perform a lot of index operations (mostly) online. If you’re only going to Enterprise for this, though, think of it as a $5,000 per CPU core tax in order to do operations (mostly) online. (Standard is $2,000 per core, Enterprise is $7,000 per core.)

You need more than 24 CPU cores.

Standard Edition handles a whopping 24 CPU cores – and if you’re on bare metal, that’s 24 physical, 48 with hyperthreading on. That is a lot of CPU power for a database server, because after all, the database server isn’t supposed to be the place where you’re doing CPU-intensive operations. That’s what app servers are for.

As you approach 50-60% CPU usage on a 24-core box, it’s time to look at which queries are using the most CPU resources, and figure out how to tune them. You can do a lot of query & index tuning for less costs than an Enterprise Edition license, for sure. Going from 24 cores of Standard to 32 cores of Enterprise is a $176,000 jump in cost just for the licensing alone! Before you even consider that, you owe it to yourself to run sp_BlitzCache @SortOrder = ‘cpu’ and start questioning what you’re doing on the SQL Server.

I’ve had tons of SQL Critical Care® engagements where folks were considering going to Enterprise Edition, only for us to find obvious easy wins in the most CPU-intensive queries. For example, the client situation that prompted this very blog post: the top CPU-intensive queries were all focused on a small set of configuration tables.

  • Short-term fix: index the tables using computed columns to make CPU-intensive queries suddenly faster and sargable
  • Mid-term fix: move those tables to a separate 24-core Standard Edition SQL Server dedicated exclusively to that task, with the fastest CPU cores available
  • Long-term fix: implement a caching layer in the application to avoid re-querying data that hadn’t changed recently

However, if we hadn’t been able to do that work quickly enough, we’d have had to upgrade the main SQL Server to Enterprise Edition and add more cores.

You need more than 1 Availability Group replica.

Your business comes up with RPO and RTO goals that the common failover clustered instance (FCI) + log shipping solution won’t cover, and you decide that the best way to meet those goals is Availability Groups. In that scenario, you’re probably going to want at least 1 replica in your primary site, and another replica in your disaster recovery site.

Enterprise Edition allows for more than 1 replica, and honestly, I think that’s a good compromise on Microsoft’s part. You can go a really, really long way with FCI + log shipping on Standard Edition. If the business wants near-zero data loss across multiple data centers, well, that’s most likely an Enterprise-grade application.

Those 3 don’t happen often, and they’re completely fair.

I think the above 3 limitations are fair delineators between the wildly-expensive Enterprise Edition and the still-pretty-expensive Standard Edition. Microsoft needs profitable products like SQL Server so they can make speculative investments in stuff like OpenAI.

However, most of the time when I’m working with a company on Enterprise Edition, they didn’t really need to buy Enterprise for any of those reasons.

It’s just that they wanted their SQL Server to handle more memory than a $2,700 laptop.

I think it’s shameful that Microsoft still gatekeeps decent memory behind Enterprise Edition, while simultaneously adding memory-hungry features like In-Memory OLTP, columnstore, and batch mode. With every release, SQL Server needs more memory – but Microsoft still caps Standard at just 128GB.

I’ve said it before and I’ll say it again: SQL Server’s biggest licensing problem isn’t that it’s too expensive – it’s that good hardware has gotten too cheap. If the next release of SQL Server continues to add more memory-hungry features while crippling Standard at 128GB, then the SQL Server marketing team is just digging its own grave.


What’s New in SQL Server 2025

SQL Server 2025
30 Comments

Today at Microsoft Ignite, Microsoft announced SQL Server 2025. The biggest new features focus on AI and bringing the latest Azure SQL DB features down to your own servers. Here are the top features:

As you run your dirty finger down your screen, reading my words aloud, you’re probably thinking to yourself, “Wait a minute – this is all stuff that’s currently in preview in Azure SQL DB.” That’s true – there aren’t any surprises here, and I think that’s fine! Microsoft can and should use Azure SQL DB as a testing ground for new things they wanna build into the boxed SQL Server product. Work the kinks out first while it’s all still managed by Microsoft’s own staff before they deploy it down on premises.

You’re gonna laugh at this, but I’m actually excited for the ability to call ChatGPT from T-SQL. I kid you not, I am gonna build support for it into the First Responder Kit! Why not add a parameter for @AskAI = 1 where your metadata is sent up to ChatGPT and ask for advice on particular problems? (You would have to have your OpenAI or Azure account already set up – I’m not paying for your advice myself, hahaha – and it’s up to you to decide whether you want to send that metadata up to the cloud. But if you wanna do it, go for it.)

You can read more on Microsoft’s blog post, Bob Ward’s post on LinkedIn, and Ignite attendees can watch this session tomorrow.

There’s no release date yet, and it’s not even in public preview yet, but you can sign up for the private preview here. Be aware that private previews typically involve a commitment to running the new version in production and having regular calls with Microsoft to talk about how it’s working in your environment.

Update: I had to laugh that 2025 also includes a rename for the feature formerly known as PSPO (pronounced piss-poor.) It’s now named Optional Parameter Plan Optimization, OPPO.


SQL ConstantCare® Population Report: Fall 2024

Every quarter, we publish adoption rate data showing how quickly people are adopting new versions of SQL Server. Today it’s time for the fall 2024 version of our SQL ConstantCare® population report.

SQL Server 2019 is still the king of the hill with almost 3X more market share than any other version!

Here’s how adoption is trending over time, with the most recent data at the right:

SQL Server adoption rates

 

While 2019 is still completely dominating the market, SQL Server 2022 did grow 3% – at the expense of 2012, 2014, and 2016:

  • SQL Server 2022: 13%, up from 10% last quarter
  • SQL Server 2019: 48%, holding steady
  • SQL Server 2017: 13%, steady
  • SQL Server 2016: 18%, down ~1%
  • SQL Server 2014: 5%, down ~1%
  • SQL Server 2012 & prior: 2%, down 1%
  • Azure SQL DB and Managed Instances: 1%, steady

SQL Server 2016 will be unsupported in less than 2 years. If everyone replaced 2012, 2014, and 2016 with SQL Server 2022, 2022 still wouldn’t dethrone 2019! 2019’s dominance is wild.

What’s more popular: Standard or Enterprise?

SQL Server Standard Edition has 50% of the market and Enterprise Edition has 35%, making Standard more popular by server count. However, in terms of licensed cores, it’s much closer: Standard has 13,862 cores, and Enterprise has 12,871.

That means in terms of licensing, we’re talking about $90 million worth of Enterprise versus $28 million worth of Standard. You can see why Microsoft wants to preserve that sweet, sweet Enterprise licensing money!


Help Me Help You.

Company News
20 Comments

In my PollGab room where y’all can ask questions, Chocolate Thunder wrote:

I do genuinely wish that I could do two things at the same time:

  1. Give y’all everything for free, and
  2. Pay for the roof over my head and put food on my table

I haven’t figured out how to do both of those things at the same time. I know how to do one of them, but not both. So I try to strike a balance: I try to give away as much as I possibly can, for free. Here’s a quick rundown of what I provide y’all at absolutely no charge:

  • The First Responder Kit: tools like sp_Blitz, sp_BlitzFirst, and more so you (and consultants all over the world) can solve problems for free
  • Training classes:  like How to Use the First Responder Kit, How to Think Like the Engine
  • SQL ConstantCare®: so you can get free monitoring for the most urgent issues like database corruption and broken backups
  • YouTube videos: in the last year, people have watched 85,200 hours of videos – on average, at any given time, 10 people are watching one of my YouTube videos
  • Short videos on my LinkedIn, TikTok, and Facebook channels

Every year, I challenge myself to give away more for free than I’ve ever given away before. 2024’s new addition was the short videos on LinkedIn, TikTok, and Facebook. This actually costs me money, because I have a social media person chopping up my Office Hours videos into bite-sized chunks and adding transcripts to make them easier to follow. (I can’t do this myself – I have zero free time left.)

Short videos don’t work for everything, of course. Some questions require longer, bigger answers. For example, in a 60-90 second free video, I can’t teach you how to rewrite a stored procedure to solve deadlocking problems. That takes explanation, a complex demo query, a cleanly rewritten one, and a long session showing the before and after effects.

So I do charge for the long, complex stuff.

I try to give away everything that folks need at the beginning of their careers. However, as they progress to the senior level and they start to face complex challenges – things that are costing the business real money – then that’s where I build more complex training classes to make those issues easier.

That means, Chocolate Thunder, that I’ve got good news and great news.

The good news is that you’ve found an authority online that you trust, whose opinion you value, and who you want to learn more complex things from.

The great news is that my training happens to be on sale this month! Now’s your chance not just to get your own problems solved, but also by buying my training, you’re helping to sponsor more free material every year. The more y’all buy, the more I can afford to give back to the community. Let’s do this together – help me help y’all!

Fundamentals
$195per year
Mastering
$695per year
Lifetime
$1,795just once

And if you want to add on our apps, SQL ConstantCare® and the Consultant Toolkit, these bundles include those too:

  • Level 1 Bundle (Fundamentals + Apps): $995/year $695/year, save $300
  • Level 2 Bundle (Fundamentals + Mastering + Apps): $1,595/year $995/year, save $600

Frequently Asked Questions

Can we pay via check or purchase order? Yes, but only for 10 or more seats for the same package, and the full payment (not just a purchase order or IOU) must be received before the sale ends. Email us now at Help@BrentOzar.com with the package you want to buy and the number of seats, and we’ll send you a quote to include with your check. Make your check payable to Brent Ozar Unlimited and mail it to 9450 SW Gemini Drive, ECM #45779, Beaverton, OR 97008. Your payment must be received before we activate your training, and must be received before the sale ends. Payments received after the sale ends will not be honored. We do not accept POs as payment unless they are also accompanied by a check in the same envelope. For a W9 form: http://downloads.brentozar.com/w9.pdf

Can we get discounts for group buys? Not during the Black Friday sale. These prices are as low as we go.

Can we send you a form to fill out? No, to keep costs low during the Black Friday sales, we don’t do any manual paperwork or sign up for your vendor system. To get these awesome prices, you’ll need to check out through our web site and use the automatically generated PDF invoice/receipt that gets sent to you via email about 15-30 minutes after your purchase finishes. If you absolutely need us to fill out paperwork, we’d be happy to do it at our regular (non-sale) prices – email us at Help@BrentOzar.com for details.


Office Hours: Guess the Theme Edition

Videos
3 Comments

There’s a secret theme to the questions I hand-picked from the queue at https://pollgab.com/room/brento. Normally I just take the top-voted ones, but today, see if you can spot the thing they all have in common:

 

Here’s what we covered:

  • 00:00 Start
  • 01:51 Tivan: Hi Brent, I’m facing a deadlock in MS SQL Server with “ORDER BY DESC” on a primary key (clustered index) during a read, conflicting with an insert on the same table. Is this related to descending scans? I couldn’t find a clear explanation. Could you share some thoughts? Thanks!
  • 03:19 ddev: Sometimes it happens that in a blocked process report I can see a frame that I know cannot be in a stacktrace (I know it is not called from that procedure). What does it mean ? It is bug I can fix ?
  • 04:38 Asking2much: Occasionally when tempdb is heavily hammered, sp_blitzwho gets an error of Lock request time out period exceeded (1second) due to tempdb.sys.sysschobjs.clst index being blocked. Would you be ok with setting the max lock_timeout value to 15 seconds? No issue with blocking liveplan
  • 07:14 Gary Numan: When tasked with fixing overall SQL VM performance with cloud hardware, what are your pros and cons of increasing server memory vs upgrading disk SKU? Which do you see more of?
  • 08:23 Vahid: Hi Brent I’ve been learning SQL DBA for about a year, mainly through tutorials. I feel I lack hands-on experience. How proficient should I be in T-SQL for this role? What’s the best learning path to improve my admin skills and problem-solving? Any advice is appreciated!
  • 09:24 Call Me Ishmael: Over a decade ago, when I “cornered” you at a SQL Saturday in Washington, DC, in-between sessions, I asked you about SCHEMAs, which at that time you were adamantly against, albeit humbly, belying your rock-star status. Are you still against the use of schemas?
  • 10:58 Jersey DBA: My company has a 3-node HA cluster. The third node is read-only for reporting. Why do we still sometimes see latency and blocking on that node with queries using the “with nolock” hint.
  • 13:30 KyleDevDBA: Hi Brent, What would you recommend when one DBA thinks another DBA isn’t pulling their weight? Is there a certain thing you look at to either prove or disprove this?
  • 15:58 CuriousDBA: Hello Brent. I see that you can use sp_blitz output to a table locally. Is there a way to store all that information centrally by running sp_blitz command against a list of all servers so that I can create a report for all critical issues across all my servers?
  • 17:56 Tim: If sql server becomes overwhelmed with locking / blocking issues, is there a way to give the server a break and allow it to catch up ?
  • 18:50 RacerX: What’s your opinion of NVME ultra disk when you are stuck with low memory (128gb) for multi TB database in Azure SQL VM?
  • 19:36 Milind: Hi Brent, Will there be any difference in join where column with regular index versus filtered index (where table has size and good number of rows)?

SSMS v21: Dark Mode, Git, Vertical Tabs, and More

Tools
10 Comments

SQL Server Management Studio v21 Preview 1 is out and let’s give it a quick whirl. It’s installed with the Visual Studio installer. That doesn’t mean Visual Studio is installed or required – it’s not – it’s just that the SSMS team is leveraging the work that the VS folks have put in over the years.

After installing, you’re prompted to sign in to sync your SSMS settings across devices, but there’s a Skip link. I do wish there was a “skip this forever” link, but whatever:

If you log in with Github, there’s a rather spooky-looking list of permissions that SSMS gets:

I’m a little suspicious as to why SSMS needs all that. Insert joke about least-privileged-permissions here. Anyhoo, after SSMS starts, to enable dark mode, click Tools, Options, put theme in the search box, and under Environment, General, choose Dark in the Color Theme:

Picking the dark theme

Presto! Dark mode:

Eagle-eyed readers will notice that is not exactly dark mode. Erin Stellato (the SSMS PM) asked y’all for patience as they gradually work through the screens, converting them to dark mode. Once you’re connected, things look better:

The thing over at the far right was in the old SSMS too, it was just disabled by default. It lets you navigate through long stored procedures easier. At the bottom right, there’s an “Add to Source Control” link, which doesn’t do anything for me despite being logged in with Github. I’m guessing I have to organize a project or something first – I’ll dig into that later.

Query plans are not in dark mode yet:

To get into source control, click Git, clone a repository. I’ll take the First Responder Kit for example:

And a few seconds later:

Emotional damage. Okay, maybe it’s because I just copy/pasted the URL straight from Github. I edited out the /tree/main part at the end of the URL, and the second time it appeared to go through, although the SSMS UI didn’t change other than now the title bar says ViewPickerAutoload:

Which is honestly awesome, because I loved the pickers, and anything that SSMS can do to help Mike, Danielle, and Frank load the truck, the better:

I’m just kidding, of course. Frank passed away a couple of months ago. If only he’d been alive to see the show grace the title bar of SQL Server Management Studio.

Look, the point is that SSMS v21 is still very, very much in preview. It will install side-by-side with the legacy version (ha ha ho ho), so you can use both. v21 doesn’t support Analysis Services, Integration Services, or maintenance plans, so if you rely on any of that, you’ll still need the old v20. There are also a list of known issues with the preview, and right now I’d say it’s still for us hard-core early adopters.


Copilot in SSMS is Kinda Like IE in SSMS

You are not ready for how weird my take is.

"Sir, this is a Wendy's"Last week at the PASS Summit conference in Seattle, Microsoft showed off the upcoming SQL Server Management Studio v21.

One of the most intriguing features is that it has Copilot built in.

No, not Github Copilot, that’s a different thing. No, not the Copilot in Visual Studio, either. No, not the Copilot that’s in the Azure portal either. SSMS Copilot is yet another version of the same basic concept: a text box where you can ask questions, and AI uses contextual awareness of your database and your query window in order to answer those questions. I don’t just like this feature, I adore it, because I already use AI every single day to get my job done. (This blog post is AI-free, as most of my posts are, but I use it for all kinds of stuff like T-SQL code review and refactoring.)

The Microsoft staff demoing SSMS Copilot at Summit (Erin Stellato, Bob Ward, Anna Hoffman) were very quick to point out its limitations:

  • It’s in very, very early preview
  • The functionality is incredibly limited so far – it can’t even read real-world query plans due to context size issues
  • The output, like any LLM output, is prone to errors and hallucinations – the output of all of the demos I saw had serious issues for production usage
  • It sends your database schema/config/queries to the cloud – but they’re very clear about not keeping or using any of it for training, and in the future, you may be able to use your own LLM endpoints on-premises
  • It’s going to take at least a couple previews before it’s publicly accessible, which means at least 6 months away
  • It doesn’t actually read the error messages and results that come back from the queries it generates

And that last part is where the wheels come off.

To understand the problem,
we gotta revisit history.

Remember when Books Online first came out? Of course you don’t, dear reader, because you’re young and attractive. But being one of the olds, let me tell you how it went.

We used to get the documentation in printed format, and then Microsoft began distributing it in electronic form as part of the installer. You could just hit F1, and browse the documentation in SSMS. Later, the documentation moved into HTML, and later still, the primary home for the documentation became Microsoft’s web site. Some users were horrified when they’d hit F1, and a browser built into SSMS would take them to Microsoft’s web site to see the most recent version of the documentation.

Eventually, people just stopped using F1, and they used Google. The limited browser built into SSMS was garbage, and it didn’t support the kinds of stuff modern users wanted to do, like view documentation sites that require Javascript, like Stack Overflow.

The web browser is still there in SSMS, but I can’t remember the last time I used it. It’s just too limited. And that’s what the problem is going to be with Copilot in SSMS.

The SSMS Copilot demos made it glaringly obvious.

The demos consisted of:

  1. Open the Copilot window in SSMS
  2. Type something into it
  3. Copy a query from the Copilot window into the SSMS editor
  4. Run the query
  5. Get an error or results
  6. Go back to step 2, copying the error, results, or clarifications back over into the Copilot window, and keep the cycle going

Which, uh, is exactly what you can do with ChatGPT and other LLMs today, and I’ve been doing for months. You don’t have to wait. Go get started now. You can pick other LLMs if you like, including local ones if you’re paranoid about sending your company’s database schema and queries up to the cloud. You can use the latest and greatest cutting edge LLM models, way beyond what SSMS Copilot supports. You can send query plans up there for analysis.

Copilot in SSMS, when it eventually ships, is going to lag far behind – just like SSMS’s web browser does.

Oh sure, SSMS Copilot absolutely does have some advantages over copy/pasting stuff into ChatGPT, like automatically picking out which tables & indexes are relevant to your question, and running diagnostic queries on your server to fetch the metadata on that table or index. But those advantages seemed so small to me, especially given how long it’s going to take to get that product live – compared to just getting started right now with ChatGPT or your LLM of choice.

Don’t get me wrong: Copilot in SSMS is still a good idea, Just like Books Online distributed via local HTML files was a good idea way back when. It was a stepping stone, and Microsoft had to do it at the time, just like they have to put AI in all their developer tooling today. I just don’t think it’s the final AI product that we’re all going to settle on.

So what could be better?

Here’s my prototype for a version of SSMS that includes AI:

I can hear your confused voice from here: “Wait, Brent, that looks just like today’s version of SSMS. You type what you want in the top pane, hit execute, and what you want comes out of the bottom pane.”

Exactly!

Why should users have to jump back and forth between two different input areas? Just type what you want!

  • If you type T-SQL, SSMS executes it against the database in question. If your query has an error, the AI reads the error, and tries to suggest changes to your query to get it right. If your query takes too long, AI suggests improvements to make it go faster.
  • If you type plain English that asks for data, the AI’s natural language to SQL capabilities fire up and write a query for you. This isn’t new: Microsoft’s demoed it already, but in the Azure Portal, a tool that makes no sense for data analysts to use.
  • If you ask for advice on your database, the AI runs diagnostic queries on your database, just like the Copilot demos we saw at Summit, and the results and advice appear in the Messages tab, with supporting evidence in the Results tab.

That simple, intuitive approach is harder to build in 2025. It’s much easier for Microsoft to ship Copilot as a separate SSMS extension, duct taped into a separate tab, and force users to copy/paste stuff back and forth between different text boxes and result sets. Copilot will even catch on temporarily in 2025-2026, just as the SSMS browser did, and you will definitely see me using it.

I’m just excited and looking forward to whatever comes next to replace it.


[Video] Office Hours: SQL Server Questions and Answers

Videos
0

That face I’m making in the video thumbnail is priceless. YouTube randomly picks these, and I laughed out loud at this one. Anyhoo, let’s get to answering your top-voted questions from https://pollgab.com/room/brento:

Here’s what we covered:

  • 00:00 Start
  • 00:59 Mohit: Hello Brent, What options does a DBA have in terms of performance tuning when managing third party application databases which have lots of crappy SQL queries and no lock hints? Last but not least, thanks for your service to the community.
  • 02:11 MyTeaGotCold: Page fullness is very important, but sp_BlitzIndex never touches sys.dm_db_index_physical_stats and Ola only touches it in LIMITED mode. What am I missing?
  • 04:19 Tony Feuz: Lot’s of talk about linked servers and how we should not do that. One of your recent posts you mentioned to move the data to the same server and I want to confirm that cross server queries = bad and cross database queries on the same server = acceptable. Do I have that correct?
  • 04:48 Trudging Through A SQL Swamp: I swear that I watched a video of you demonstrating how using NOLOCK could return incorrect data. I have looked everywhere and can not find that video. I did find a very short blog post by you about it, but would like to see the video again. Is it still available?
  • 05:35 Crazy Harry: Who is the Itzik Ben-Gan of PostgreSQL?
  • 05:49 Paul Hunter: How do you properly setup Index maintenance using Ola Hallengren on an AG? My environment has one active Server and one inactive server for fail over. (You will most likely ask why I used an AG for this, I didn’t. It is just something I have to deal with)
  • 06:43 mailbox: What are the advantages & disadvantages to housing your Data Lake in SQL Server? I’ve seen many sites push towards housing data lake on some NOSQL DB.
  • 07:56 Juan Pablo Gallardo: Is it correct that performance is greatly impacted by the cluster size of the partition, ie. 8k cluster size is ideal?
  • 08:53 MuSQL: Hi Brent, Recently involved in a debate on LI with a .Net dev. who claims that Stored procedures are legacy and that new projects never use them. I feel the pain when migrating between DBRMs but also the benefit of not shuffling data back and forth. Whats your opinion on this?
  • 10:00 Dopinder: Does SQL row / page compression make up for the low drive performance in Azure? Has it got you over the finish line?
  • 10:54 ScenarioFromRealWorld: How can I let coworkers stop using Activity Monitor. Are there any new articles regarding this? Because I cannot see that AM is getting any better than before
  • 12:07 OracleIsDiffrent: After downgrade MSSQL2019 from Ent. licence to Sta.we noticed small perform. issues.Queries who do index seeks and scans are running slower.The execution plans are same, major diff. is execution mode on index operations.On Ent. where running in batch mode now I can see row mode.
  • 12:51 Yavuz: Hello Brent. I’ve been a DBA for over a year now and noticed that DBA’s don’t really write too many queries. How did you get good at writing long @$$ sprocs and T-SQL while being on the data administration side? It’s mostly developers and BI folks writing the queries, not the DBA
  • 14:39 Bruno: What do you think of transactional replication? Would it be better to use Log Shipping instead? We have a publisher distributing a lot of publications and we experience some performance issues on a regular basis. Thanks Brento and Cheers to the DBA great family.

Office Hours in the Valley of Fire

Videos
1 Comment

I took the Graffiti Gulf 356 out to the Valley of Fire State Park to exercise it, and took your top-voted questions from https://pollgab.com/room/brento.

Here’s what we covered:

  • 00:00 Start
  • 01:39 mailbox: Hey Brent! I’m really enjoying your prerecorded training classes. Quick question,I’m running sp_BltizCache @SortOrder = ‘reads’ on our DW server and receiving a priority 1 warning of Plan Cache Instability. How meaningful is this warning on a DW server?
  • 02:49 Briggers: Hi Brent. I have inherited an intense AG with 1 database, utilising an async read-only secondary. Is there a way to help reduce the size of a redo queue? For example reducing the number of checkpoints (Automatic) on the primary?
  • 04:00 DoesTimeReallyExist: Hi Brent! I prefer to learn SQL Server in depth instead of learning no-SQL or PostgreSQL and TimescaleDB. What do you think?
  • 04:31 Aksel: Duplicate Index How to explain a situation where there are indexes A (col1, col2) and B (col1, col2, col3, col4), and there is a query that checks the values of col1 and col2. If the query uses index A, no memory grant occurs. If the query uses index B, a memory grant occurs.
  • 05:31 Cameo: What are your pros / cons of using local time vs UTC time for OS clock running SQL Server? Which do you see more of out in the field?
  • 06:51 mailbox: My friend’s company pays only to license 4 cores enterprise(SA) on a reporting server. Best I can tell, we don’t need enterprise as of now. However, we might need it in the future. Is it a good idea to switch to Std edition on same budget, thus increasing core count?
  • 08:00 adba: I am seeing high CPU on a SQL server VM,I have added more cpu and tuned the query, but we still see the issue. What parameters do I need to monitor to show it is a problem on the host side.
  • 08:59 GenXerTiredOfTheBabyBoomers: You have probably got this question often, but getting up there in age/end-of-corporate-life, how does one become a consultant? I have decades of experience with MS SQL, Windows OS, and networks, yet have trouble crossing the great divide of corp to cnslt.
  • 10:18 SportsFan101: What are your thoughts on the new JSON data type in Azure SQL? Will we see this feature in the new on-prem version, SQL Server 2025?
  • 11:28 Bandhu: When doing row vs page compression for canned SQL, do most of your clients do all row compression or all page compression or some combination?
  • 11:48 mailbox: In your experience, when is it time to upgrade server hardware? Maybe I should ask, how often should we try to upgrade the server hardware of our SQL Servers? My friend says that they have VMs on hosts that are 8 years old.
  • 12:53 Juan Pablo Gallardo: In pure ERP environments, with no user queries or tasks outside the ERP, is it safe to say that any deadlock is responsibility of the ERP vendor to solve?
  • 14:06 Dopinder: What criteria do you use when evaluating standup desks? What is your favorite brand and model?
  • 14:44 Vasilis Hadjiloucas: Should I exclude my antivirus software from scanning my FILESTREAM container in SQL Server? What are the potential risks or benefits of doing so?
  • 15:17 CryingInTheCorner: Hi Brent, you still didn’t update most of your Mastering classes since Sql Server 2022 came out… :'(
  • 16:41 Dumb dude: If you had a server that was having a lot of resource contention and you were only allowed to add CPUs or Memory, but not both, without cost being factored into it, which would you pick.
  • 17:21 About the 356’s Graffiti Gulf paint job
  • 18:40 Dopinder: Can a single DBA manage a new SQL AG or is a team of DBAs recommended for AG administration? What do you see in the field?
  • 19:31 mailbox: What is it like to work as a DBA for a consulting firm? Is it just non-stop performance tuning fun? Or are their lots of nights and weekend work?
  • 20:50 Eddy Grant: When upgrading Azure SQL VM from 2019 to 2022, is it ok to do in place migration since we have snapshot backups or should we logship to new VM hardware?

Office Hours at the PASS Summit in Seattle

SQL Server
0

I’m in Seattle this week for the PASS Data Community Summit. Before the pre-conference sessions started, I sat down to take your top-voted questions from https://pollgab.com/room/brento.

Here’s what we covered:

  • 00:00 Start
  • 02:29 MyTeaGotCold: How are you finding DbBeaver for Microsoft SQL Server? Like you, I find ADS buggy.
  • 03:22 DBA_Mufassa: We have a SQL 2019 std VM that was already provisioned with 4 cores. We noticed antivirus is using CPU a lot. We want to add 4 more cores just for OS processes to use. VM total now 8 cores. Can CPU affinity in SQL be set to 4 cores so we stay compliant with Microsoft licensing?
  • 04:33 SportsFan101: Do you have a list of DBCC commands that you still use? At a recent job interview, I was asked to name all the DBCC comamnds that I know or use. What do you think of this question?
  • 06:34 VegasDBA: Hi Brent! I have 3 AGs. I’d like to put a copy of each on another SSRS instance. I inherited hundreds of SPs using linked servers for reporting and it’s been an issue with failovers and upgrades. When hosts become unavailable or change names, reports all fail. Recommendations?
  • 07:53 Vishnu: Is AWS storage for SQL Server glacial slow like Azure storage for SQL Server?
  • 08:52 Banhdu: What is your opinion of Elastic Query in Azure SQL DB for cross server searching? Is it as bad as linked server queries?
  • 09:09 Jökull: SQL best practices assessment for Azure SQL VM, shows fragmentation warnings like so Medium – Remove fragmentation of dbo.Acme.IDX_Foo_DefID index. Current fragmentation level is 25.93% What is your opinion of these best practice suggestions? Is medium too high?
  • 09:51 Rockwell: What is your opinion of Azure PostgreSQL? Does it compare favorably with Amazon’s offering?
  • 10:45 Bandhu: What are your pros / cons of chat gpt vs copilot? Which commercial version has more bang for the buck?
  • 11:32 Philippe Addelia: Hello Brent, I am wondering what the best platform would be to automate tests, such as unit testing, regression testing, post deployment testing and functionality testing. Would tSQLt be a good choice?
  • 13:04 Oli the dba: Is AWS as frustrating as Azure ? It constantly feels like one step forward two steps back ! I find this non stop relating to performance and architectural designs. Need more perf? Sure turn the dial. Btw now your HA is gone. Sigh.
  • 14:17 Håkan: Do you have, or do you know of a course that could work as an in-house certification for basic querying skills for DW purposes? Looking for something like the old Exam 70-761 (Querying Data with Transact-SQL), but could be a bit simpler.
  • 14:56 ChompingBits: This is an entirely academic question but I was curious if the order of the ON clause in an INNER JOIN matters. I.E. If FromTable.Column = JoinedTable.Column performs better than JoinedTable.Column = FromTable.Column. I wouldn’t think it makes any difference, but was curious.
  • 16:13 Nom: Have you seen an Azure SQL Database/Managed instance that was about to exceed the maximum storage space allowed by Azure? How would you go about resolving issues where the cloud storage limits are going to be exceeded sooner or later?
  • 17:52 Crazy Harry: What’s your recommended way to periodically export data out of Red Shift into Azure SQL VM?
  • 18:12 J.T.: I’ve been a SQL DBA for 9 years now and have not used A.I. tools at all professionally or personally. In a previous episode, you’ve mentioned that the money is well spent. What is one example of how you use the tools and/or do you have any suggestions on where to begin?
  • 20:00 Ricardo: I need to improve a function that is already fast as executions/minute = 7350. What is the best approach to go from a blink to half-a-blink please?
  • 20:56 SQLFumbler: A developer asked if I can help extend the message column in error logs. Deadlock entries only show 300 characters, truncating details needed to identify the SP causing the locks. E.g., Backup logs show over 400 characters. Is it possible?
  • 22:05 Renzi: Do you have any helpful scripts / tools to find permissions granted in SQL for AD users that no longer exist?
  • 22:40 Ricardo: Hi Brent. I was going to ask about my nervousness around changing hundreds of untrusted foreign keys and constraints (as detailed my sp_blitz). But as I was typing “Brent-in-my-head” piped up with “test in a test system” and “discus with the team first”. Thanks again Brent 🙂
  • 23:36 SteveE: Hi Brent, What are the reasons that would cause long plan compilation times on a particular query
  • 24:14 Q-Ent: Hi Brent. I was wondering how you create maintain and monitor all the links of type brentozar.com\go\***
  • 24:34 Garry B: Are you going to PASS Summit?

Who’s Hiring in the Microsoft Data Platform Community? November 2024 Edition

Who's Hiring
5 Comments

Is your company hiring for a database position as of November 2024? Do you wanna work with the kinds of people who read this blog? Let’s set up some rapid networking here.

If your company is hiring, leave a comment. The rules:

  • Your comment must include the job title, and either a link to the full job description, or the text of it. It doesn’t have to be a SQL Server DBA job, but it does have to be related to databases. (We get a pretty broad readership here – it can be any database.)
  • An email address to send resumes, or a link to the application process – if I were you, I’d put an email address because you may want to know that applicants are readers here, because they might be more qualified than the applicants you regularly get.
  • Please state the location and include REMOTE and/or VISA when that sort of candidate is welcome. When remote work is not an option, include ONSITE.
  • Please only post if you personally are part of the hiring company—no recruiting firms or job boards. Only one post per company. If it isn’t a household name, please explain what your company does.
  • Commenters: please don’t reply to job posts to complain about something. It’s off topic here.
  • Readers: please only email if you are personally interested in the job.

If your comment isn’t relevant or smells fishy, I’ll delete it. If you have questions about why your comment got deleted, or how to maximize the effectiveness of your comment, contact me.

Each month, I publish a new post in the Who’s Hiring category here so y’all can get the latest opportunities.


Watch Me Stream at the PASS Summit for Free!

#SQLPass
5 Comments

This week at the PASS Data Community Summit in Seattle, 15 sessions are getting streamed online for free! I’m proud to be one of ’em – my session’s on Friday. Here’s the lineup, all times Pacific:

Wednesday:

Thursday:

Friday:

To join in, just go to the PASS Data Community Summit home page, put in your email, and watch the videos. See you there!


[Video] Office Hours: Let’s Have a Drink

Videos
3 Comments

I was making myself a drink to film Office Hours and I realized I should just film it in my home bar. I mixed myself a gin & tonic and took your top-voted questions from https://pollgab.com/room/brento:

Here’s what we discussed:

  • 00:00 Start
  • 00:50 MyTeaGotCold: Can you name anyone who radically disagrees with you? After nearly 50 questions, I trust you too much and want to hear from the dark side.
  • 02:02 DataGuy: What are your thoughts on the Azure offerings of PostgreSQL vs AWS? Obviously you prefer AWS, but is Microsoft really that far behind? I ask because we are locked into Azure and are looking for opportunities to save on licensing for very specific apps.
  • 03:13 DoesTimeReallyExist: Hi Brent! Do you have experience working with TimescaleDB? If so, how would you rate its performance?
  • 03:21 Yusuf: Do you see foresee any issues granting the SHOW PLAN permission to a dev user so they can tune their queries for production SQL VM?
  • 04:11 Dopinder: Will DBAs and software developers be replaced by AI in the next 5 years? How should they upskill to avoid obsolescence?
  • 06:06 SportsFan101: Hey Brent, You have previously mentioned that the issue with open source is that when something breaks there is no one to call (no official support). I’ve never worked with open source. What do IT teams do when they encounter an issue with Open Source RDMS?
  • 07:27 Mola Ram: How should we handle sending of emails from SQL Server so that recipients know why they are receiving an email and can opt out?
  • 08:10 Mr. SqlSeeks: Perf issue caused by a new plan being generated. No idea why a different plan was built,. Days of research. Restructured the code. Now performs in all scenarios. Is it ever OK to stop looking for the root cause because you were able to fix it and spent days on research already?
  • 09:43 Buttercup: Azure marketplace image installed SQL Server with master and msdb on C drive. Do you have recommended way to relocate or do we just need to suck it up?
  • 10:17 nick: What should you be aware of when creating a database with enterprise level amount of tables
  • 11:01 Rob DBA: Hi Brent! Working as more of an “Application DBA” wondering any points/methods you apply to determine a query is too far gone? Eg, slow with 88 joins to some very large tables where its doing heavy logic in the db that cant change.How to word rewrite to the business / devs?
  • 13:49 Midlife DBA: Hi Brent, Have you had any experience with customers that have backup/recovery solutions like Rubrik or Cohesity? Any pros/cons you would be willing to share?
  • 15:09 mailbox: Is SQL Server a good place to build a data lake? Any recommendations on DBMS that are designed for data lakes and offer good product support?
  • 17:11 Vishnu: How good is your Internet when on the ship? Good enough to do day to day work?
  • 18:04 Garthe Knight: What are your favorite 80’s TV shows?
  • 18:41 Thomas Dolby: What’s your opinion of the azure feedback site used for SQL Server enhancements? Microsoft seems to advocate it on linked-in.

Launch Day Bonus: Free Stuff on Friday

Company News
3 Comments

Our annual Black Friday sale launches this Friday and runs all month.

For those of you who are early birds, the folks who move quickly when the sales open on Friday, I’ve got a special bonus for you.

The first 100 buyers can use coupon code EarlyBird11 to save an additional 11% off the already-discounted Black Friday prices. When you go to put the coupon code in during checkout, it’ll show you how many are left:

Don’t use the coupon today! You wouldn’t wanna pay full price, not when the Black Friday deals are only a couple days away. See you on Friday!