<body >

Cumulative update package 4 for SQL Server 2005 Service Pack 2

Monday, October 22, 2007

Microsoft's getting a little punchy!
An access violation occurs in the "sqlservr!BufferPartition::Steal" function, and SQL Server stops responding.

Committing an access violation is the definition of stealing, no? So this seems like perfectly normal behavior for a steal function!

I like that SQL Server appears to get mad and ignore you when you the buffer manager starts stealing. This confirms my suspicion that SQL Server is actually an obnoxious child.

Labels: ,

Read the article.

Permalink

Multiline everything matches in VBScript and Javascript

Saturday, October 20, 2007

Apparently VBScript uses the same syntax as javascript for regular expressions, so they both suffer from the ". means everything .. except that it doesn't" bug. You'd think that [.\s] would do the trick, but it doesn't. The best workaround I've seen is [\s\S] (that is, whitespace and not-whitespace).

Labels:

Read the article.

Permalink

Cheese Hedgehogs



Cheese ellipsoids with molded snouts, peppercorn eyes, and almond slice spikes. It would be nice if the eyes were more edible ... soy nuts?

Labels:

Permalink

Cheese Castle



  • Cheese brick walls with arches and titters and towers. Use different colors of cheese to achieve a brick look.
  • Carrot canons
  • Veggie dip moat
  • Broccoli and cauliflower trees
  • Penants: cheese slices on skewers on pretzel sticks

Labels:

Permalink

Agutuk!

Friday, October 19, 2007

Boil the oil and reindeer fat for 2-3 minutes. Cool until lukewarm. Take a bowlful of loose snow (not too powdery) and add oil. Beat well to avoid lumps. Let freeze a bit and then fold in wild berries. Egad!

Labels:

Read the article.

Permalink

I'm a Dawbis





The Dawbis is remote and shy;
It shuns the gaze of passers-by.

from The Utter Zoo Alphabet, by Edward Gorey

Permalink

Manic Panic Electric Banana



Electric Banana is precisely what it sounds like -- bright, unnatural, saturated yellow. The photo shown here -- faded and in desperate need of bleach -- does not do it justice.

Labels:

Permalink

Special Effects Iguana Green



I use Special Effects Iguana Green every December. It's my Christmas color. A vibrant, saturated green, it is precisely what Electric Lizard and Enchanted Forest are not. Fades nicely, so you can let it go longer than two weeks without embarrassment.

Labels:

Permalink

Manic Panic Flaming



Manic Panic Flaming is fluorescent red. It fades to a nice orange very much like Electric Lava and might as well be the same color except that Electric Lava is a tiny bit more orange at the beginning.

Labels:

Permalink

Manic Panic Electric Lava



Manic Panic Electric Lava starts out a fluorescent nearly-red and fades to a pretty autumnal variegated orange and yellow, pictured at right. Works well with brown roots growing out, so I often let it go for longer than my normal two-week redying cycle.

This dye glows sort of a neon yellow under a black light.

Labels:

Permalink

Special Effects Blue Mayhem



Special Effects Blue Mayhem was my very first color and is a delightful, vibrant blue, not quite as saturated as Manic Panic's Shocking Blue. With care, it can last up to two weeks.

Labels:

Permalink

Manic Panic Purple Haze



Manic Panic Purple Haze begins as vaguely reserved rich red-purple (not to be mistaken for a natural color, but not as stand-out as blue, for example), but the red disappears after a shampoo, leaving a vibrant purple that is not even slightly violety.

Labels:

Permalink

Manic Panic Shocking Blue



Manic Panic Shocking Blue is saturated and vibrant. It's my favorite color, and I wear it by default. It can be stretched to last two weeks via diligent avoidance of shampoo, but a 1.5 week reapplication cycle is best.

Labels:

Permalink

Maintenance Plan Cleanup Tasks



My observations suggest that you can only add a maintenance cleanup task (to delete expired backups) from the machine on which SQL Server resides. When I run the maintenance plan wizard from SSMS on my own machine, I don't get that option.

Once you successfully add a maintenance cleanup task, how do you get it to delete .bak, .dif and .trn files all in the same task? Leaving the extension box blank doesn't result in anything getting deleted. The secret is to enter * as the extension. The period before the extension should be omitted.

Labels: , ,

Permalink

Hair Color Base and Procedure



All dyes are applied to bleached hair and left on for a minimum of four hours. I try to avoid shampooing more often than every few days, use a gentle shampoo, and when available, I try to use a Manic Panic colorizing shampoo of the appropriate color in lieu of regular shampoo.

I find that any dye needs to be reapplied at least every two weeks to maintain a respectable hue. There are a few, noted in their posts, which can be extended beyond that because they fade attractively. Applying 1 cup of equal parts vinegar and water after rinsing the dye out does not appear to extend the lifetime of dyes of either brand that I use, but it does rinse out extra dye that isn't in your hair but doesn't want to come off in the initial water rinse, thereby making your first shower less likely to leave blue streaks down your forehead and back.

Labels:

Permalink

Manic Panic Ultra Violet

Thursday, October 18, 2007

Manic Panic Amplified Ultra Violet is a bright, striking violet .. for a few days. This color doesn't stick well in either the cream or the gel formula. Use only if you're willing to reapply it every week and can accept that most people think it's blue.

Labels:

Permalink

Manic Panic Enchanted Forest



Manic Panic Enchanted Forest is anything but. Failed to make much of an impression on my hair, coming out a dingy gray-green of which I moved quickly to rid myself.

Labels:

Permalink

Manic Panic Electric Lizard



Manic Panic Amplified Electric Lizard might glow under a blacklight (I didn't try), but I was singularly unimpressed with its brightness. The best it could do was a dull lime green.

Labels:

Permalink

Querying Outlook



One of my developers is proposing to put the text of every error email that the web application generates into the database because they contain debug information. I'm not certain that anyone will use this information, so I wanted to estimate how space this was going to take up. I had a bunch of the error emails in my mailbox, and I discovered that if you highlight a bunch of messages, copy, and paste into Excel, you get the same grid. The sizes are strings ("34 KB"), but you can then use a formula to isolate the number ("=INT(LEFT(D2, LEN(D2)-3))") and use the AVERAGE function on them.

Labels: ,

Permalink

Most Costly Queries Running Right Now



Out of memory? Use the sys.dm_exec_query_memory_grants DMV to find the heaviest query running right now and kill it.

By memory usage:

SELECT session_id, (requested_memory_kb/1024.) AS [Requested Memory (MB)], grant_time, query_cost, text
FROM sys.dm_exec_query_memory_grants
CROSS APPLY sys.dm_exec_sql_text(sql_handle) t
ORDER BY requested_memory_kb DESC


By query cost:

SELECT session_id, (requested_memory_kb/1024.) AS [Requested Memory (MB)], grant_time, query_cost, text
FROM sys.dm_exec_query_memory_grants
CROSS APPLY sys.dm_exec_sql_text(sql_handle) t
ORDER BY query_cost DESC

Labels: , ,

Read the article.

Permalink

Flame Platter

Wednesday, October 17, 2007


A frit sprinkle here, and a frit sprinkle there ... the layering and unevenness of the monochromatic parts of this platter from the Art Institute of Chicago suggest that the whole thing is frit, rather than the usual frit atop a layer of solid glass plan.

Labels:

Permalink

Simple Stars Are All the Rage




I've seen these in a number of places now. Some chunks of solid and dichro tossed onto a clear or colored background, add wire wrap, and you have an instant crowd pleaser. This specimen is from the Art Institute of Chicago.

Labels:

Permalink

Woven Glass Platter ... Stringer Bowl?




Strips of clear glass overlapped into a decorative platter. I wouldn't call this "woven" .. perhaps draped .. but it's a nifty effect.

This leads me to ponder ... could I make a bowl out of liquid stringer? Loops, drapes, swirls, etc? You'd need to fuse it flat, then slump it as usual, as it would drip if you just put it straight into a slumping mold. What about glass' tendency to pull in on itself when fused? A small test is clearly required.

If that fails, a clear base topped with loopy loops of stringer.

Labels:

Permalink

Crushed-Glass Platter




Very cool gradiation of both color and chunk-size. Looks like chunks of clear floated in colored frit. Available from the Art Institute of Chicago.

Labels:

Permalink

Mosaic Platter



Mosaic Platter
The Art Institute of Chicago is carrying this pop-artish design which could easily be produced by lining up precut fusible shapes on a base layer of clear. It's a cute idea. I don't love the rod dots, but one could make swoopy stringer swirls instead, or break up the square monotony with a random instance of another shape cutting across the pattern.

Labels:

Permalink

FTP Server Status Codes

Tuesday, October 16, 2007

RFC 959

110 Restart marker reply.
In this case, the text is exact and not left to the
particular implementation; it must read:
MARK yyyy = mmmm
Where yyyy is User-process data stream marker, and mmmm
server's equivalent marker (note the spaces between markers
and "=").
120 Service ready in nnn minutes.
125 Data connection already open; transfer starting.
150 File status okay; about to open data connection.

200 Command okay.
202 Command not implemented, superfluous at this site.
211 System status, or system help reply.
212 Directory status.
213 File status.
214 Help message.
On how to use the server or the meaning of a particular
non-standard command. This reply is useful only to the
human user.
215 NAME system type.
Where NAME is an official system name from the list in the
Assigned Numbers document.
220 Service ready for new user.
221 Service closing control connection.
Logged out if appropriate.
225 Data connection open; no transfer in progress.
226 Closing data connection.
Requested file action successful (for example, file
transfer or file abort).
227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).
230 User logged in, proceed.
250 Requested file action okay, completed.
257 "PATHNAME" created.

331 User name okay, need password.
332 Need account for login.
350 Requested file action pending further information.

421 Service not available, closing control connection.
This may be a reply to any command if the service knows it
must shut down.
425 Can't open data connection.
426 Connection closed; transfer aborted.
450 Requested file action not taken.
File unavailable (e.g., file busy).
451 Requested action aborted: local error in processing.
452 Requested action not taken.
Insufficient storage space in system.

500 Syntax error, command unrecognized. This may include errors such as command line too long.
501 Syntax error in parameters or arguments.
502 Command not implemented.
503 Bad sequence of commands.
504 Command not implemented for that parameter.
530 Not logged in.
532 Need account for storing files.
550 Requested action not taken. File unavailable (e.g., file not found, no access).
551 Requested action aborted: page type unknown.
552 Requested file action aborted.
Exceeded storage allocation (for current directory or
dataset).
553 Requested action not taken. File name not allowed.

Labels: ,

Permalink

HTTP Server Status Codes



RFC 2616

Informational 1xx
  • 100 Continue
  • 101 Switching Protocols
Successful 2xx
  • 200 OK
  • 201 Created
  • 202 Accepted
  • 203 Non-Authoritative Information
  • 204 No Content
  • 205 Reset Content
  • 206 Partial Content
Redirection 3xx
  • 300 Multiple Choices
  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 305 Use Proxy
  • 306 (Unused)
  • 307 Temporary Redirect
Client Error 4xx
  • 400 Bad Request
  • 401 Unauthorized
  • 402 Payment Required
  • 403 Forbidden
  • 404 Not Found
  • 405 Method Not Allowed
  • 406 Not Acceptable
  • 407 Proxy Authentication Required
  • 408 Request Timeout
  • 409 Conflict
  • 410 Gone
  • 411 Length Required
  • 412 Precondition Failed
  • 413 Request Entity Too Large
  • 414 Request-URI Too Long
  • 415 Unsupported Media Type
  • 416 Requested Range Not Satisfiable
  • 417 Expectation Failed
Server Error 5xx
  • 500 Internal Server Error
  • 501 Not Implemented
  • 502 Bad Gateway
  • 503 Service Unavailable
  • 504 Gateway Timeout
  • 505 HTTP Version Not Supported

Labels: ,

Permalink

SQL Server 2008 Interesting Features



Extracted from an article on DatabaseJournal.com.

Theoretically, SQL Server 2008 will be released in Q1 of 2008, along with a new version of Visual Studio and Windows.

Data Compression


According to Microsoft, while using compression will slightly increase CPU usage, overall system performance will be improved by reducing I/O and increasing buffer-hit rates. Data and indexes can both be compressed, and it doesn't affect other features.

Performance Data

More perf counters have been added. The data collected by the counters is stored in a centralized data warehouse. Microsoft states that running the default set of performance related monitors will consume less than 5% of CPU and memory resources.

Performance Dashboard: tool that can read saved performance data. Historical and baseline comparisons can be made and used to create action triggers. For example, if memory use exceeds a threshold for more than five minutes, a more detailed data collection can be automatically triggered.

Performance Studio: a collection of performance tools. Together they can be used for monitoring, troubleshooting, tuning and reporting. The Data Collector component of the studio is configurable and low overhead. It supports several collecting methods, including queries, traces, and perf counters. Data can also be collected programmatically. Once data is collected, there are drill-down and aggregate reporting options, including suggestions for potential performance tuning.

Installation

The installer will be able to retrieve updates from Microsoft and install SQL Server, service packs, and patches as a single step. Service packs will be uninstallable.

Data Synchronizing Features

SQL 2008, Visual Studio, and ADO.NET bring together new methods of creating disconnected applications which synchronize with a central database. SQL 2005 started by providing support for change tracking by using triggers. SQL 2008 synchronizing is better integrated and optimized.

Dates and Times

New data types in SQL 2008.
  • Date: date only, no time.
  • Time: time only, no date.
  • Date Time Offset: "UTC time-zone aware value" (whatever that means)

Table-Valued Parameters

It's sort of a hack, but you create a UDT which is a table and pass variables of that type into sprocs.

Merge

A new TSQL command, MERGE, allows a single statement to UPDATE, INSERT, or DELETE a row depending on its condition. The example below demonstrates the MEGRE being used to combine a new list of Inventory Item descriptions into the existing Inventory Master. In addition to new Descriptions, there are some new parts included in the NewInventory table. Without the Merge statement, two commands would need to run. The first would look for a match then upgrade the Description. The second statement would look for non matches and then INSERT. With MERGE, one statement can perform both tasks as shown below.

MERGE InventoryMaster AS im
USING (SELECT InventoryID, Descr FROM NewInventory) AS src
ON im.InventoryID = src.InventoryID
WHEN MATCHED THEN
UPDATE SET im.Descr = src.Descr
WHEN NOT MATCHED THEN
INSERT (InventoryID, Descr) VALUES (src.InventoryID, src.Descr);

Labels: ,

Read the article.

Permalink

Using Visual Studio.NET 2003 with FrontPage projects

Friday, October 12, 2007

  1. Tools > Options > Projects > Preferred access method: FrontPage Extensions
  2. New blank solution
  3. If you've never opened it in VS.Net, File > Add Project > New Project > Visual C# Projects > New Project in Existing Folder. If you have, File > Add Project > Existing from Web.
  4. Enter a name.
  5. Enter the URL of your project as the folder name to open. Provide login information.

Labels:

Permalink

sp_betterhelpindex: A better sp_helpindex



Microsoft's system sprocs are nice and all, but they're rather basic. I have written an improvement to sp_helpindex which also includes key columns, included columns, reads and writes, fragmentation, and freshness of statistics. Like sp_helpindex, it goes in master but can be called from any database. Download the script with proper tabbing.

USE master
GO

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'sp_betterhelpindex')
DROP PROCEDURE sp_betterhelpindex
GO

CREATE PROC dbo.sp_betterhelpindex @tableName VARCHAR(255) AS

DECLARE @sql VARCHAR(MAX)

SET @sql = '
SET NOCOUNT ON

USE ' + DB_NAME() + '

DECLARE @object_id INT, @index_id INT, @indexName VARCHAR(500)
DECLARE @keyColumns VARCHAR(2000), @includedColumns VARCHAR(2000)

SET @object_id = OBJECT_ID(''' + @tableName + ''')

DECLARE @index TABLE (
index_id INT,
keyColumns VARCHAR(2000),
includedColumns VARCHAR(2000)
)

DECLARE sp_betterhelpindex_indexes CURSOR FAST_FORWARD FOR
SELECT index_id
FROM sys.indexes
WHERE object_id = @object_id

OPEN sp_betterhelpindex_indexes
FETCH sp_betterhelpindex_indexes INTO @index_id
WHILE @@fetch_status = 0
BEGIN
SELECT @keyColumns = NULL, @includedColumns = NULL

SELECT @keyColumns = ISNULL(@keyColumns + '', '', '''') +
columns.name + (CASE WHEN is_descending_key = 1 THEN ''(-)'' ELSE '''' END)
FROM caV2.sys.indexes indexes
INNER JOIN caV2.sys.index_columns index_columns ON indexes.object_id = index_columns.object_id
AND indexes.index_id = index_columns.index_id
INNER JOIN caV2.sys.columns columns ON index_columns.object_id = columns.object_id
AND index_columns.column_id = columns.column_id
WHERE indexes.object_id = @object_id AND indexes.index_id = @index_id AND is_included_column = 0
ORDER BY index_column_id

SELECT @includedColumns = ISNULL(@includedColumns + '', '', '''') +
columns.name + (CASE WHEN is_descending_key = 1 THEN ''(-)'' ELSE '''' END)
FROM caV2.sys.indexes indexes
INNER JOIN caV2.sys.index_columns index_columns ON indexes.object_id = index_columns.object_id
AND indexes.index_id = index_columns.index_id
INNER JOIN caV2.sys.columns columns ON index_columns.object_id = columns.object_id
AND index_columns.column_id = columns.column_id
WHERE indexes.object_id = @object_id AND indexes.index_id = @index_id AND is_included_column = 1
ORDER BY index_column_id

INSERT INTO @index VALUES (@index_id, @keyColumns, ISNULL(@includedColumns, ''''))

FETCH sp_betterhelpindex_indexes INTO @index_id
END
CLOSE sp_betterhelpindex_indexes
DEALLOCATE sp_betterhelpindex_indexes

SELECT sys.indexes.name,
(CASE WHEN is_primary_key = 1 THEN ''primary key, ''
WHEN is_unique = 1 THEN ''unique, ''
ELSE '''' END) + LOWER(sys.indexes.type_desc) AS type,
keyColumns, includedColumns,
sys.filegroups.name AS [filegroup],
user_seeks + user_scans + user_lookups AS readsByQueries, user_updates AS updates,
CAST(physicalStats.avg_fragmentation_in_percent AS INT) AS [fragmentation %],
STATS_DATE (@object_id , i.index_id) AS statisticsUpdated, i.index_id
FROM @index i
INNER JOIN sys.indexes ON sys.indexes.object_id = @object_id AND i.index_id = sys.indexes.index_id
INNER JOIN sys.filegroups ON sys.indexes.data_space_id = sys.filegroups.data_space_id
INNER JOIN sys.dm_db_index_usage_stats usage ON usage.object_id = @object_id
AND i.index_id = usage.index_id
AND usage.database_id = DB_ID()
INNER JOIN sys.dm_db_index_physical_stats(DB_ID(), @object_id, NULL, NULL, NULL) physicalStats
ON i.index_id = physicalStats.index_id AND alloc_unit_type_desc != ''LOB_DATA''
ORDER BY sys.indexes.type_desc, keyColumns, includedColumns
'

EXEC(@sql)

Labels: ,

Permalink

Caprock Vector



A thread-safe vector component for use in the Session and Application.

The Vector Object is a COM component designed to work with any scripting environment (it also supports native interfaces within Visual Basic and Visual C++). Whether you are using IIS/ASP or you are using the Windows Script Hosting environment, you can use this object to store items in a grow-able array or vector. The items can be any automation compatible data type such as strings, numbers and other automation objects. This object is designed to be a dynamic, growable array or collection. It supports traditional item references by numeric index such as:

for index = 0 to 10
   response.write vec.Item(index)
next

but also item reference by textual index like so:

set foo = vec.Item("Foo")

The unique quality about textual or Named items, they are only supported by automation objects that implement the "Name" property. In other words, you can store an automation object in the Vector. The Vector inspects the automation object for a property called "Name". If the Vector finds this property, it will allow you to reference the item in the Vector by name or numerical index.

Special consideration has been made for the Vector object to work with IIS/ASP's intrinsic Application and Session objects. You can store a reference to a Vector object in one or both of these objects without affecting the performance of your web application. This is accomplished by marking the Vector COM component as both apartment and free-threaded, aggregating the Free-Threaded Marshaler. This component was developed with VC++ 6.0 and ATL 3.0 for the best performance possible.

Download the 76k zip file containing the DLL, source code, samples and documentation.

Labels:

Permalink

Caprock StopWatch



An ASP stopwatch timer component.

Download the 21k zip file
containing the DLL, source code and samples.

Labels:

Permalink

Caprock Dictionary: Thread-safe ASP dictionary component



A thread-safe dictionary component for use in the Session and Application instead of the built-in scripting.dictionary component, which is not thread-safe.

The Dictionary Object is a COM component designed to work with any scripting environment (it also supports native interfaces within Visual Basic and Visual C++). Whether you are using IIS/ASP or you are using the Windows Script Hosting environment, you can use this object to store items with an associated key. The key and the item can be any automation compatible data type such as strings, numbers and other automation objects.

This object is designed to be a replacement for the Scripting.Dictionary object. Special consideration has been made for the Dictionary object to work with IIS/ASP's intrinsic Application and Session objects. You can store a reference to a Dictionary object in one or both of these objects without affecting the performance of your web application. This is accomplished by marking the Dictionary COM component as both apartment and free-threaded, aggregating the Free-Threaded Marshaler. Refer to Don Box's excellent article, "House of COM", Microsoft Systems Journal (now MSDN Magazine), September 1998. In the article he explains the impact each apartment model has on the performance of IIS and ASP. This component was developed with VC++ 6.0 and ATL 3.0 for the best performance possible.

Download the 78k zip file containing the DLL, source code, samples and documentation.

Labels:

Permalink

Reading Delimited Text Files with ADO

Thursday, October 11, 2007

The key point in this code being how to tell whether the first row is headers.

Labels:

Read the article.

Permalink

How SQL Server Chooses the Type of Join

Wednesday, October 10, 2007

Suggests a possible cause for when you're debugging a sproc that is sometimes fast and sometimes slow, even after clearing the procedure cache, with no rhyme or reason.

Labels:

Read the article.

Permalink

Storing Variable-Length Decimal Data



If you have lots (and I mean LOTS -- we have 175 GB of school-related data, and our biggest per-table savings would have been 1.5 MB) of nulls in decimal/numeric columns with large precision, you may be able to save noticeable space with vardecimal, which requires only 2-4 bytes per column when the column is 0 or null.

Labels:

Read the article.

Permalink

Status of rollback of killed connections



KILL [spid] WITH STATUSONLY

shows the percent completion of the rollback.

Labels:

Permalink

Spinlocks

Tuesday, October 9, 2007

A spinlock is a very lightweight lock used for accessing things which must be synchronized, like caches. They don't show up in the queryable wait indicators. When there is contention for them, you'll see lots of runnable (waiting to run) processes. This is more likely to happen on x64 systems because the caches can get bigger.

Labels:

Permalink

 
   



Blogger Template by Gecko & Fly, modified by yours truly.