|
|
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: SQL Server, Titter
Read the article.
Permalink  
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: Web Applications - Javascript
Read the article.
Permalink  
Cheese ellipsoids with molded snouts, peppercorn eyes, and almond slice spikes. It would be nice if the eyes were more edible ... soy nuts?Labels: Art Food
Permalink  
- 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: Art Food
Permalink  
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: Titter
Read the article.
Permalink  
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: SQL Server, SQL Server - Backups, SQL Server - SSMS
Permalink  
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: Hair Color
Permalink  
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: Hair Color
Permalink  
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: Hair Color
Permalink  
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: Hair Color
Permalink  
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: Excel Tricks, Outlook Tricks
Permalink  
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 DESCLabels: SQL Server, SQL Server - Diagnostics, SQL Server - Scripts
Read the article.
Permalink  
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: Art - Glass - Fusing - Ideas
Permalink  
 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: Art - Glass - Fusing - Ideas
Permalink  
 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: Art - Glass - Fusing - Ideas
Permalink  
 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: Art - Glass - Fusing - Ideas
Permalink  
 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: Art - Glass - Fusing - Ideas
Permalink  
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: Internet, Web Applications
Permalink  
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: Internet, Web Applications
Permalink  
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: SQL Server, SQL Server 2008
Read the article.
Permalink  
Friday, October 12, 2007
- Tools > Options > Projects > Preferred access method: FrontPage Extensions
- New blank solution
- 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.
- Enter a name.
- Enter the URL of your project as the folder name to open. Provide login information.
Labels: ASP.NET
Permalink  
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: SQL Server, SQL Server - Scripts
Permalink  
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: ASP
Permalink  
An ASP stopwatch timer component.
Download the 21k zip file containing the DLL, source code and samples.Labels: ASP
Permalink  
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: ASP
Permalink  
Thursday, October 11, 2007
The key point in this code being how to tell whether the first row is headers.Labels: ADO
Read the article.
Permalink  
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: SQL Server
Read the article.
Permalink  
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: SQL Server
Read the article.
Permalink  
KILL [spid] WITH STATUSONLY
shows the percent completion of the rollback.Labels: SQL Server
Permalink  
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: SQL Server
Permalink  
|
|