July 2009 - posts - Premier Field Engineering

July 2009 - posts

Mixen van full en incremental content deployment... Niet doen!

Onlangs kreeg ik voor de zoveelste keer de opmerking van een klant dat ze het vreemd vonden dat in hun content deployment scenario de source site collectie zoveel keer kleiner was dan de target site collectie. Mijn wedervraag was of ze toevallig zowel full deployments als incremental deployments mixen. Het antwoord mag zich raden, namelijk JA..

Dit was voor mij de reden om deze korte post te doen.

Het mixen van full en incremental deployment jobs is namelijk niet ondersteund en zorgt voor een aantal vervelende zaken:

  1. In sommige scenarios kunnen er verschillen ontstaan tussen de source en target site. Items die in de source site zijn verwijderd, kunnen nog steeds bestaan in de target site.
  2. Elke keer wanneer een full deployment een item opnieuw deployed naar de target site zal er –indien versioning actief is – een nieuwe versie van het item aangemaakt worden. Vandaar dus de grotere target site dan source site.

Gebruik full deployment alleen bij de initiële deployment. Mocht full deployment vereist zijn omdat er problemen zijn ontstaan met de incremental deployments (bijvoorbeeld als de changelog retentie is verlopen), gebruik dan full deployment op een lege site collectie en gebruik vervolgens incremental deployments.

Stefan Goßner – onze content deployment goeroe – heeft een aantal posts, welke meer informatie geven over content deployment:

http://blogs.technet.com/stefan_gossner/archive/tags/Content+Deployment/default.aspx

Posted door Mark Priem | met no comments

Database Statistics Timerjob wijziging in WSS/MOSS SP2

Om de prestaties, capaciteit en integriteit van Sharepoint databases te waarborgen is een gedegen maintenance plan van serieus belang. Voordat Service Pack 2 released werd, hadden we een gewelding Whitepaper van Bill Baer http://go.microsoft.com/fwlink/?LinkId=111531&clcid=0x409 welke ons de fijne kneepjes van Sharepoint Database Maintenance bijbracht. Daarnaast hadden we nog het overzicht over de mogelijkheden met Maintenance plans voor SQL op http://support.microsoft.com/kb/932744/.  Met de wijzigingen in Service Pack 2 komt hier iets verandering in.

In service pack 2 is er een grote wijziging aangebracht aan de Database Statistics timerjob. Voor SP2 was de enige taak van deze job de query statistics te updaten van de content databases. Na uitrol van SP2 is deze job echter ook verantwoordelijk voor het defragmenteren van de indices (oftewel het herstructureren van de data aangezien de sharepoint contentdatabases gebruik maken van clustered indices). Hiervoor gebruikt Sharepoint volgende stored procedure:

USE [WSS_Content]
GO
/****** Object:  StoredProcedure [dbo].[proc_DefragmentIndices]    Script Date: 05/08/2009 04:05:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[proc_DefragmentIndices]
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @objectid int
    DECLARE @indexid int
    DECLARE @command varchar(8000)
    DECLARE @baseCommand varchar(8000)
    DECLARE @schemaname sysname
    DECLARE @objectname sysname
    DECLARE @indexname sysname
    DECLARE @currentDdbId int
    SELECT @currentDdbId = DB_ID()
    PRINT CONVERT(nvarchar, GETDATE(), 126) + ': Starting'
    DECLARE @onlineState varchar(10)   
    DECLARE @edition int
    SELECT @edition = CAST(SERVERPROPERTY('EngineEdition') AS int)
    IF (@edition <> 3) SET @onlineState = 'OFF) '
    ELSE SET @onlineState = 'ON) '
    -- Loop over each of the indices
    DECLARE indexesToDefrag CURSOR FOR
    SELECT
        i.object_id,
        i.index_id,
        i.name
    FROM
        sys.indexes AS i
    INNER JOIN
        sys.objects AS o
    ON
        i.object_id = o.object_id
    WHERE
        i.index_id > 0 AND
        o.type = 'U'
    OPEN indexesToDefrag
    -- Loop through the partitions.
    FETCH NEXT
    FROM
        indexesToDefrag
    INTO
        @objectid,
        @indexid,
        @indexname
    WHILE @@FETCH_STATUS = 0
    BEGIN
        -- Lookup the name of the index
        SELECT
            @schemaname = s.name
        FROM
            sys.objects AS o
        JOIN
            sys.schemas AS s
        ON
            s.schema_id = o.schema_id
        WHERE
            o.object_id = @objectid
        PRINT CONVERT(nvarchar, GETDATE(), 126) + ': ' + @schemaname + '.' + @indexname + ' is now being rebuilt.'
        -- Fragmentation is bad enough that it will be more efficient to rebuild the index
        SELECT @baseCommand =
            ' ALTER INDEX ' +
                @indexname +
            ' ON ' +
                @schemaname + '.' + object_name(@objectid) +
            ' REBUILD WITH (FILLFACTOR = 80, ONLINE = '
        -- Use dynamic sql so this compiles in SQL 2000
        SELECT @command =
            ' BEGIN TRY ' +
               @baseCommand + @onlineState +
            ' END TRY ' +
            ' BEGIN CATCH PRINT CONVERT(nvarchar, GETDATE(), 126) + '': Going offline'' ' +
               -- Indices with image-like columns can't be rebuild online, so go offline
               @baseCommand + 'OFF) ' +
            ' END CATCH '
        PRINT CONVERT(nvarchar, GETDATE(), 126) + ': Rebuilding'
        EXEC (@command)
        PRINT CONVERT(nvarchar, GETDATE(), 126) + ': Done'
        FETCH NEXT FROM indexesToDefrag INTO @objectid, @indexid, @indexname
    END
    CLOSE indexesToDefrag
    DEALLOCATE indexesToDefrag
    RETURN 0
END

Dit betekent echter wel dat deze 'limiet' van 100GB iets belangrijker wordt dan voor SP2, daar je bij het gebruik van deze timer job minder controle hebt over wanneer de defragmentatie wordt uitgevoerd, iets wat dus wel impact heeft op de server farm.

Denk dus na over je aanpak omtrent defragmentatie van databases.

Heb je een grote farm, dan zou ik adviseren maintenance plans te gebruiken voor statistics en defragmentatie. je zult dan via Central Administration de database timerjob moeten disablen. Heb je een kleine farm, adviseer ik de database timerjob te gebruiken. Eventuele maintenance plans die al defragmentatie (reorganize) jobs bevatten, dienen aangepast te worden.

Posted door Mark Priem | met no comments