For some time, Intel C/C++ compilers addons had the ability to automaticly generate parallel code (as in the coder does not have to do it). I also recall hearing some thing about Parallel LINQ, but thats outside the scope of my narrow view of the world. I was just browsing a Sybase script (for the TPC-H benchmark) and notice the following, which is our version of BULK INSERT.
LOAD TABLE PARTSUPP (PS_PARTKEY '|',PS_SUPPKEY '|',PS_AVAILQTY '|',PS_SUPPLYCOST '|',PS_COMMENT '|')
FROM '/rawdata/partsupp.tbl.1',
'/rawdata/partsupp.tbl.2',
'/rawdata/partsupp.tbl.3',
'/rawdata/partsupp.tbl.4',
'/rawdata/partsupp.tbl.5',
'/rawdata/partsupp.tbl.6',
etc
Now I have not inclination to read Sybase documentation. I am inclined to interpret that from a single client session, Sybase will fire off multiple threads, one per file to do the BULK INSERT into the PARTSUPP table. (Paul White NZ looked this up the Sybase doc, and it is in fact a not a parallel command). No matter, even if does not do parallelism, it should and the syntax just cries: do me in parallel!
SQL CAT has put out a great white paper showing that SQL Server can be tuned for truely amazing parallel bulk load performance. But from what I recall, some degree of spoon bending was required. I think they used SSIS. Sure we could open multiple SSMS windows, with each one loading a different file, But, I capable of redefining what it means to be a lazy @$$.
SSMS 2008 already allows Multiple Server Query Execution, but what I want is to execute against one server BULK INSERT, each thread assigned a different file. The simplicity of the Sybase statement syntax is really nice so we don't have to write some parameter substitution code.
Potentially, this could also be able to parallel INSERT/UPDATE on a partitioned table, with each thread handling a single partition. It would be nice do parallel INSERT/UPDATE on a non-partitioned table, but if there are technical reasons this can't be done, I would happy with just parallel write ops to a partitioned table.
So will this be in Denali? if not, perhaps a soon to follow hot-fix (lets set aside the feature-fix delineation for this). Long ago, the MS x86 OS people was wanted really anxious to facilitate handling larger than 32-bit virtual addresses (until full 64-bit was available) and advised don't wait for Willamette, put it in Katmai. When that did not produce a favorable response, a team from another company did.
Per request from Joe B
1) only the Select portion of a query can have a parallel execution plan,
the Insert, Update and Delete portions are serial.
Adam suggests updating the indexes in parallel for IUD
2) Create Index can be fully parallel.
3) IUD cannot be done in parallel from a single query,
but you could try running multiple queries concurrently,
or use Adams query parallelization CLR.
4) DBCC can exploit parallelism to some degree
If I recall, parallel execution initiated in SQL Server 7.0
5) SSIS, which has some other tricks for parallel bulk load like the ability
to specify that the data is ordered
(important if you want to do a parallel load into an indexed table).
Third Party & Open Source
sqlbulktool? http://www.sqlbi.com/Default.aspx?tabid=78
http://www.SQLsharp.com/