Author: way0utwest

  • SQL Saturday Advice – PhotoJournalism

    I try to carry a camera, and a video camera, most of the time when I’m traveling. I have a camera on my iPhone as well, and for all that, I tend to just forget to take enough images when I travel. Especially at events where I’m often talking to someone, and trying to engage.

    At various events I’ve seen the images and video handled different ways, but I think that SQL Saturday #28 set another bar by having a guy walk around all day, taking pictures, hitting every speaker in every session, and perhaps most importantly, getting a shot of every prize winner.

    Part of running a successful event is being able to market it. The enthusiasm, and the excitement so many people feel is infectious. I think it’s why we’re seeing this resurge in local events as the webinars and remote training, while good, lack some of the buzz and excitement of a live event.

    This is a great video from the SQL Saturday #40 team, and it’s something I’d like to see more of.

    http://www.gohardtv.com/mm_player.swf?http_base_url=http://www.gohardtv.com/&videoid=2584439

    Get some audio, video, images of your event. Post them on the site, make a slideshow, do a voice over, and publish it. You’ll inspire people in other areas, but you’ll also inspire others to support your events in the future.

  • Where Are the Programmers?

    When I was growing up, I thought I wanted to be a computer programmer. I had my own Vic-20, and various other machines, and I wrote code that was used to solve problems. I programmed the computer to handle various calculations or manipulations for school or fun and thought that was very cool. I solved many chemistry labs with the help of my computer.

    The other day someone asked me what I did for a living and I said that I used to work with computers, but now wrote about them. They asked me if I was a computer programmer in the past. That was something I hadn’t heard in a long time.

    I’m not sure when we changed from programmers to developers. Fundamentally we do the same thing, though I’ll admit that developer sounds more important, or more talented. I’m sure at some point a programmer wanted to separate their job from everyone else, called themselves a developer, and the trend caught on.

    I haven’t worried about titles for a long time, but at one point in my career I did press to get the senior DBA title after working with SQL Server for about 6 or 7 years. At that time I felt I knew more about SQL Server than the majority of people that I met, and I deserved to be “senior.” I’m still not sure if I had earned it at that time, but it was a title I was proud of.

    It seems that us data professionals have tried to separate ourselves from the average DBA with database architects and database developers and any number of other database specialties that sound more important than just DBA or developer.

    It makes me wonder what’s coming next. Will we start to advertise ourselves as DSS (data security specialist) or DTS (data transformation specialist) or even BIDS (Business Intelligence developer specialist)? Who knows, those acronyms are already well known in the SQL Server world. They might just impress a manager who knows just a little about SQL Server.

    Steve Jones

  • The Cloud is Nothing Special

    In the news this week, there was a major announcement. Buck Woody (blog | @BuckWoody), longtime Microsoft employee and favorite speaker of many in the community, bought an iPad. That in and of itself, with Buck’s frequent touting of Microsoft products, is amazing, and Buck wrote about it on his blog, noting that Windows Azure is platform independent. He even has a picture of a NASA app, something built on Azure, running on his new toy.

    This week, SQL Azure finally gets its own web site, showcasing SQL Server in the cloud. I know lots of DBAs, and IT people in general might be down on computing in the cloud, but I’m not. I think that there are some problems, some applications, that will benefit from cloud computing. Not every instance of SQL Server should be moved to the cloud, but some will work better in the cloud. If nothing else, being able to use cloud services is another evolution of the hosted environments that so many small companies use today. You can get the services you need without the need to do as much administration or setup.

    For most of us, the services that we might use on the Internet are platform independent. We don’t care that Facebook uses Cassandra, or Google uses BigTable, or that TractorByNet uses whatever technology they use. We just want our particular service to work, and it doesn’t mattter what the underlying technology is.

    I think it’s the same with cloud computing. Ultimately it doesn’t matter if it’s Azure, EC2, or some other service. Just like Brent Ozar views virtualization, I would bet that some of the time a cloud service is “good enough” to use.

  • Common SQL Server Mistakes – SELECT *

    I’ve been trying to work on some new presentations so that I have a variety, including some spares, when I go to events. One of the topics that I think has some value, especially for .NET and sysadmin groups, is a list of common mistakes, how to fix them, and why they’re bad.
    I was going to call this Common Developer Mistakes, but I’m not sure that would go over well at Developer events, and I see DBAs making these mistakes along with Windows admins.
    I decided to build a series of blog posts as I work through the presentation to document some of the issues, and help me work through speaking points. Please feel free to comment.
    SELECT * Is For Short Term Use Only
    The first mistake that I often see in application code is that too often people write things like

    SELECT * 
    FROM Sales.Customer

    .csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, “Courier New”, courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }

    What does this do? If I run this in my 2008 AdventureWorks database, I get something like this:

     SelectStar_b

    You can see that I end up with multiple columns (CustomerID, TerritoryID, CustomerType, rowguid, ModifiedDate). That’s handy, and cool, and allows me to get all the data in the table.

    But do I really need it?

    In most applications, my guess is that we don’t. Why do we need TerritoryID? That’s a foreign key to the SalesTerritory table, and typically what I want instead is the SalesTerritory.Name column instead of the ID value.

    I could do this:

    SELECT *
    FROM Sales.Customer c
    INNER JOIN Sales.SalesTerritory t
    ON c.TerritoryID = t.TerritoryID

    but that’s any better. Now I’ve returned even more columns, 10 more to be exact, including TerritoryID twice, once from each table. In AdventureWorks, this is 19k rows, and at a minimum this query has returned 19k rows x 8 bytes (int data type) too much data. That doesn’t sound like a lot, but what if this runs in your application 500 times a day? That’s a lot of wasted:

    • bandwidth
    • disk access
    • memory from caching
    • CPU work on the server AND client

    I would also guess that most of the time when you access a customer, you don’t even want all the rows. Likely you want to filter this somehow, and you will with a WHERE clause, but it’s still wasted time and resources.

    We know that the database often is a bottleneck. It’s a shared resource, it’s one machine, and it doesn’t scale as easy as multiple clients or web servers, or even developers, so we should avoid wasting resources when we don’t have to.

    What Do You Do?

    Here’s what I recommend:

    You can write this, and it’s what I often do:

    SELECT TOP 2
    *
    FROM Sales.Customer

    And I get a limited result set:

    SelectStar_e

    Why is this better? I do this so I can easily see the column names. I can then include those in my SELECT statement, with a quick rewrite.

    SelectStar_f

    I could also quickly use the Object Explorer to find the columns like this:

    SelectStar_g

    And you can right click, and choose “script” and “as SELECT”

    SelectStar_h

    and paste the code into your query window. The results would look something like this:

    SelectStar_i

    Alternatively, my employer, Red Gate Software, makes a fantastic product called SQL Prompt that will help you quickly grab columns. For me, I can do an SSF, and get a SELECT * FROM and then choose the table:

    SelectStar_c

    Not that I see the columns to the right. I could also just select the table with a tab and then if I remove my askterisk, I get a list of columns I can easily pick:

    SelectStar_d

    SQL Prompt makes this easier, but it isn’t that hard to just do this by hand. You could easily grab the columns you need from SSMS and add them to queries.

    The database is a limited resource, even if you have a 256 core server with 1024GB of RAM. You still want to query the data you need and only return what’s necessary. A little more effort when building code will pay off later with much better performing applications.

    References
    A few links from other people that see this as an issue as well.