EP6 sp12 Performance Issue, Need help to improve performance

We have a Portal development environment with EP6.0 sp12.
What we are experiencing is performance issue, It's not extremely slow, but slow compared to normal ( compared to our prod box). For example, after putting the username and password and clicking the <Log on> Button it's taking more than 10 secs for the first home page to appear. Also currently we have hooked the Portal with 3 xAPPS system and one BW system. The time taken for a BW query to appear ( with selection screen) is also more than 10 secs. However access to one other xAPPS is comparatively faster.
Do we have a simple to use guide( Not a very elaborate one) with step by step guidance to immediately improve the performance of the Portal.
Simple guide, easy to implement,  with immediate effect is what we are looking for in the short term
Thanks
Arunabha

Hi Eric,
  I have searched but didn't find the Portal Tuning and Optimization Guide as you have suggested, Can you help to find this.
Subrato,
  This is good and I would obviously read through this, The issue here is this is only for Network.
  But do you know any other guide, which as very basic ( may be 10 steps) and show step by step the process, it would be very helpful. I already have some information from the thread Portal Performance - page loads slow, client cache reset/cleared too often
But really looking for answer ( steps to do it quickly and effectively) instead of list of various guides.
It would be very helpful if you or anybody( who has actually done some performance tuning) can send  a basic list of steps that I can do immediately, instead of reading through these large guides.
I know I am looking for a shortcut, but this is the need of the hour.
Thanks
Arun

Similar Messages

  • Performance Issue ---Need help

    Hello Friends,
    Could you guys please help me in improving the performance. This query takes 2 minutes to run and I was wondering if you guys can just take a look and suggest something. I would really appreciate your help on this
    ALTER PROCEDURE [dbo].test
    @loginid int,
    @branchid int,
    @asofdate datetime,
    @ageperiod int,
    @showdetails bit,
    @programstatus INT,
    @propertytype INT,
    @sortby nvarchar(100)
    AS
    BEGIN
    SET FMTONLY OFF -- will allow temp tables on procedures for fyi reporting
    SET NOCOUNT ON
    SELECT
    mecdate = CONVERT( DATETIME, CONVERT(NVARCHAR(4),monthendyear) + '-' + CONVERT(NVARCHAR(2),monthendmonth) + '-1 00:00:00.000' ),
    branchid
    INTO
    #mecs
    FROM
    tmonthendcompleted
    WHERE
    companyid = 1 -- we should put it as parameter but we only have one company
    AND
    @branchid = -999
    OR branchid = @branchid
    --Create temp table
    CREATE TABLE #tmpAR
    branchid int not null default (0),
    accountid int not null default (0),
    siteid int not null default (0),
    programid int not null default (0),
    routeid int not null default(0),
    invoiceid int not null default (0),
    paymentid int not null default(0),
    transactiondate datetime not null,
    eventname nvarchar(50) not null,
    agingbucketnumber int not null default (0),
    invoicetotal money not null default (0),
    paymenttotal money not null default (0),
    prepay money not null default (0),
    prepayid int not null default(0)
    --Get pending invoices
    INSERT INTO
    #tmpAR (branchid, accountid, siteid, programid, routeid, invoiceid, transactiondate, eventname, agingbucketnumber, invoicetotal)
    SELECT
    invitem.servicecenterid, inv.accountid, est.siteid, invitem.programid,
    ISNULL((select top 1 routeid from tprogramvalue WHERE programid = invitem.programid AND effectivedate <= @asofdate and routeid > 0 order by effectivedate desc, utctimestamp desc), 0),
    inv.invoiceid, inv.invoicedate, max(invitem.itemdescription),
    -- go to first day of invoice month, get max MEC date and datediff to get bucket # (according to asofdate)
    ISNULL((DATEDIFF(MONTH, DATEADD(month, DATEDIFF(month, 0, inv.invoicedate), 0), (SELECT MAX(mecdate) FROM #mecs WHERE branchid = invitem.servicecenterid AND mecdate <= @asofdate)) ),0),
    SUM(invitem.subtotalregular + invitem.fedtaxregular + invitem.statetaxregular + invitem.localtaxregular)
    FROM
    tinvoiceitem invitem
    INNER JOIN tinvoice inv ON invitem.invoiceid = inv.invoiceid
    INNER JOIN tprogram prog ON invitem.programid = prog.programid
    INNER JOIN tprogramsetup ON prog.programtypeid = tprogramsetup.programtypeid
    INNER JOIN testimate est ON prog.estimateid = est.estimateid
    INNER JOIN vreportlogin on invitem.servicecenterid = vreportlogin.branchid
    INNER JOIN ttempkeyid tmpkey on tprogramsetup.reportcategory=tmpkey.keyid and tmpkey.typeid=64 and tmpkey.loginid = @loginid
    WHERE
    vreportlogin.loginid = @loginid
    AND (@branchid=-999 or vreportlogin.branchid = @branchid)
    AND inv.invoicedate < @asofdate
    GROUP BY
    invitem.servicecenterid, inv.accountid, est.siteid, invitem.programid, inv.routeid,
    inv.invoiceid, inv.invoicedate
    HAVING
    (ROUND(SUM(ISNULL([subtotalregular],0) + ISNULL([fedtaxregular],0) + ISNULL([statetaxregular],0) + ISNULL([localtaxregular],0)),2)
    ROUND(ISNULL((select sum(tpaymentitem.amount)
    from tpaymentitem
    inner join tpayment on tpayment.paymentid = tpaymentitem.headerid
    where invoiceid=inv.invoiceid
    and tpayment.datereceived < @asofdate),0)
    ,2)
    ) > 0
    --Get payments to pending invoices
    INSERT INTO
    #tmpAR (branchid, accountid, siteid, programid, routeid, invoiceid, paymentid, transactiondate, eventname, agingbucketnumber, paymenttotal)
    SELECT
    payitem.servicecenterid, pay.accountid, est.siteid, payitem.programid,
    ISNULL((select top 1 routeid from tprogramvalue WHERE programid =payitem.programid AND effectivedate <= @asofdate and routeid > 0 order by effectivedate desc, utctimestamp desc), 0),
    payitem.invoiceid, pay.paymentid, pay.datereceived,
    (select max(tinvoiceitem.itemdescription) from tinvoiceitem where invoiceid = payitem.invoiceid),
    -- go to first day of invoice month, get max MEC date and datediff to get bucket # (according to asofdate)
    ISNULL((DATEDIFF(MONTH, DATEADD(month, DATEDIFF(month, 0, inv.invoicedate), 0), (SELECT MAX(mecdate) FROM #mecs WHERE branchid = payitem.servicecenterid AND mecdate <= @asofdate)) ),0),
    SUM(payitem.amount)
    FROM
    tpaymentitem payitem
    INNER JOIN tpayment pay ON payitem.headerid = pay.paymentid
    INNER JOIN tprogram prog ON payitem.programid = prog.programid
    INNER JOIN tprogramsetup ON prog.programtypeid = tprogramsetup.programtypeid
    INNER JOIN testimate est ON prog.estimateid = est.estimateid
    INNER JOIN tinvoice inv ON payitem.invoiceid = inv.invoiceid
    INNER JOIN vreportlogin on payitem.servicecenterid = vreportlogin.branchid
    INNER JOIN ttempkeyid tmpkey on tprogramsetup.reportcategory=tmpkey.keyid and tmpkey.typeid=64 and tmpkey.loginid = @loginid
    WHERE
    vreportlogin.loginid = @loginid
    AND (@branchid=-999 or vreportlogin.branchid = @branchid)
    AND payitem.invoiceid in (select invoiceid from #tmpAR)
    AND pay.datereceived < @asofdate
    GROUP BY
    payitem.servicecenterid, pay.accountid, est.siteid, payitem.programid, inv.routeid,
    payitem.invoiceid, inv.invoicedate, pay.paymentid, pay.datereceived
    --Get payments to cop
    INSERT INTO
    #tmpAR (branchid, accountid, siteid, programid, routeid, prepayid, transactiondate, eventname, prepay)
    SELECT
    payitem.servicecenterid, pay.accountid, est.siteid, payitem.programid,
    ISNULL((select top 1 routeid from tprogramvalue WHERE programid =payitem.programid AND effectivedate <= @asofdate and routeid > 0 order by effectivedate desc, utctimestamp desc), 0) as routeid,
    pay.paymentid, pay.datereceived, max(progname.programname), SUM(payitem.amount)
    FROM
    tpaymentitem payitem
    INNER JOIN tpayment pay ON payitem.headerid = pay.paymentid
    INNER JOIN tprogram prog ON payitem.programid = prog.programid
    INNER JOIN tprogramsetup ON prog.programtypeid = tprogramsetup.programtypeid
    INNER JOIN tprogramsetupname000 progname ON progname.programtypeid = prog.programtypeid
    INNER JOIN testimate est ON prog.estimateid = est.estimateid
    INNER JOIN vreportlogin on payitem.servicecenterid = vreportlogin.branchid
    INNER JOIN ttempkeyid tmpkey on tprogramsetup.reportcategory=tmpkey.keyid and tmpkey.typeid=64 and tmpkey.loginid = @loginid
    WHERE
    vreportlogin.loginid = @loginid
    AND (@branchid=-999 or vreportlogin.branchid = @branchid)
    AND pay.datereceived < @asofdate
    AND payitem.invoiceid = 0
    GROUP BY
    pay.paymentid, payitem.servicecenterid, pay.accountid, est.siteid, payitem.programid, pay.datereceived
    CREATE TABLE #tmpAR2
    branchid int not null default (0),
    accountid int not null default (0),
    siteid int not null default(0),
    programid int not null default(0),
    routeid int not null default(0),
    invoiceid int not null default(0),
    paymentid int not null default(0),
    prepayid int not null default(0),
    transactiondate datetime,
    transactiondescription nvarchar(200),
    eventname nvarchar(50),
    InBucket01 money default (0),
    InBucket2 money default (0),
    InBucket3 money default (0),
    InBucket4 money default (0),
    InBucket5 money default (0),
    prepay money default (0),
    ProgramInBucket01 money not null default(0),
    ProgramInBucket2 money not null default(0),
    ProgramInBucket3 money not null default(0),
    ProgramInBucket4 money not null default(0),
    ProgramInBucket5 money not null default(0),
    ProgramDebit money not null default(0),
    ProgramCredit money not null default(0),
    ProgramBalance money not null default(0),
    RouteInBucket01 money not null default(0),
    RouteInBucket2 money not null default(0),
    RouteInBucket3 money not null default(0),
    RouteInBucket4 money not null default(0),
    RouteInBucket5 money not null default(0),
    RouteDebit money not null default(0),
    RouteCredit money not null default(0),
    RouteBalance money not null default(0),
    BranchInBucket01 money not null default(0),
    BranchInBucket2 money not null default(0),
    BranchInBucket3 money not null default(0),
    BranchInBucket4 money not null default(0),
    BranchInBucket5 money not null default(0),
    BranchDebit money not null default(0),
    BranchCredit money not null default(0),
    BranchBalance money not null default(0)
    update #tmpAR
    set agingbucketnumber = 4
    where agingbucketnumber > 4
    --Bucket 0 INVOICES
    INSERT INTO #tmpAR2 (branchid, accountid, invoiceid, transactiondate, transactiondescription, eventname, InBucket01, siteid, programid, routeid)
    SELECT branchid, accountid, invoiceid, transactiondate, dbo.fngetTransactionDescription(invoiceid,1) as description, eventname, invoicetotal, siteid, programid, routeid
    FROM #tmpAR
    WHERE agingbucketnumber = 0
    AND invoicetotal > 0
    --Bucket 0 PAYMENTS
    INSERT INTO #tmpAR2 (branchid, accountid, paymentid, transactiondate, transactiondescription, eventname, InBucket01, siteid, programid, routeid)
    SELECT branchid, accountid, paymentid, transactiondate, dbo.fngetTransactionDescription(paymentid,2) as description, eventname, paymenttotal*-1, siteid, programid, routeid
    FROM #tmpAR
    WHERE agingbucketnumber = 0
    AND paymenttotal <> 0
    --Bucket 1 INVOICE
    INSERT INTO #tmpAR2 (branchid, accountid, invoiceid, transactiondate, transactiondescription, eventname, InBucket2, siteid, programid, routeid)
    SELECT branchid, accountid, invoiceid, transactiondate, dbo.fngetTransactionDescription(invoiceid,1) as description, eventname, invoicetotal, siteid, programid, routeid
    FROM #tmpAR
    WHERE agingbucketnumber = 1
    AND invoicetotal > 0
    --Bucket 1 PAYMENT
    INSERT INTO #tmpAR2 (branchid, accountid, paymentid, transactiondate, transactiondescription, eventname, InBucket2, siteid, programid, routeid)
    SELECT branchid, accountid, paymentid, transactiondate, dbo.fngetTransactionDescription(paymentid,2) as description, eventname, paymenttotal*-1, siteid, programid, routeid
    FROM #tmpAR
    WHERE agingbucketnumber = 1
    AND paymenttotal <> 0
    --Bucket 2 INVOICES
    INSERT INTO #tmpAR2 (branchid, accountid, invoiceid, transactiondate, transactiondescription, eventname, InBucket3, siteid, programid, routeid)
    SELECT branchid, accountid, invoiceid, transactiondate, dbo.fngetTransactionDescription(invoiceid,1) as description, eventname, invoicetotal, siteid, programid, routeid
    FROM #tmpAR
    WHERE agingbucketnumber = 2
    AND invoicetotal > 0
    --Bucket 2 PAYMENT
    INSERT INTO #tmpAR2 (branchid, accountid, paymentid, transactiondate, transactiondescription, eventname, InBucket3, siteid, programid, routeid)
    SELECT branchid, accountid, paymentid, transactiondate, dbo.fngetTransactionDescription(paymentid,2) as description, eventname, paymenttotal*-1, siteid, programid, routeid
    FROM #tmpAR
    WHERE agingbucketnumber = 2
    AND paymenttotal <> 0
    --Bucket 3 (91-120 days) INVOICES
    INSERT INTO #tmpAR2 (branchid, accountid, invoiceid, transactiondate, transactiondescription, eventname, InBucket4, siteid, programid, routeid)
    SELECT branchid, accountid, invoiceid, transactiondate, dbo.fngetTransactionDescription(invoiceid,1) as description, eventname, invoicetotal, siteid, programid, routeid
    FROM #tmpAR
    WHERE agingbucketnumber = 3
    AND invoicetotal > 0
    --Bucket 3 (91-120 days) PAYMENTS
    INSERT INTO #tmpAR2 (branchid, accountid, paymentid, transactiondate, transactiondescription, eventname, InBucket4, siteid, programid, routeid)
    SELECT branchid, accountid, paymentid, transactiondate, dbo.fngetTransactionDescription(paymentid,2) as description, eventname, paymenttotal*-1, siteid, programid, routeid
    FROM #tmpAR
    WHERE agingbucketnumber = 3
    AND paymenttotal <> 0
    --Bucket 4 (over 120 days) INVOICES
    INSERT INTO #tmpAR2 (branchid, accountid, invoiceid, transactiondate, transactiondescription, eventname, InBucket5, siteid, programid, routeid)
    SELECT branchid, accountid, invoiceid, transactiondate, dbo.fngetTransactionDescription(invoiceid,1) as description, eventname, invoicetotal, siteid, programid, routeid
    FROM #tmpAR
    WHERE agingbucketnumber = 4
    AND invoicetotal > 0
    --Bucket 4 (over 120 days) PAYMENTS
    INSERT INTO #tmpAR2 (branchid, accountid, paymentid, transactiondate, transactiondescription, eventname, InBucket5, siteid, programid, routeid)
    SELECT branchid, accountid, paymentid, transactiondate, dbo.fngetTransactionDescription(paymentid,2) as description, eventname, paymenttotal*-1, siteid, programid, routeid
    FROM #tmpAR
    WHERE agingbucketnumber = 4
    AND paymenttotal <> 0
    --Prepay
    INSERT INTO #tmpAR2 (branchid, accountid, prepayid, transactiondate, transactiondescription, eventname, prepay, siteid, programid, routeid)
    SELECT branchid, accountid, prepayid, transactiondate, dbo.fngetTransactionDescription(prepayid,2) as description, eventname, prepay*-1, siteid, programid, routeid
    FROM #tmpAR
    WHERE prepay <> 0
    DECLARE @InBucket01Total money
    DECLARE @InBucket2Total money
    DECLARE @InBucket3Total money
    DECLARE @InBucket4Total money
    DECLARE @InBucket5Total money
    DECLARE @DebitBalance money
    DECLARE @CreditBalance money
    DECLARE @Balance money
    --PROGRAM TOTALS
    SELECT
    INTO
    #tmpProgramTotals
    FROM
    #tmpAR2
    DECLARE @programid int
    DECLARE @routeid int
    WHILE (select COUNT(*) from #tmpProgramTotals) > 0
    BEGIN
    select top 1 @programid = programid, @routeid = routeid from #tmpProgramTotals
    --Get Program Totals
    select
    @InBucket01Total = SUM(InBucket01),
    @InBucket2Total = SUM(InBucket2),
    @InBucket3Total = SUM(InBucket3),
    @InBucket4Total = SUM(InBucket4),
    @InBucket5Total = SUM(InBucket5),
    @DebitBalance = SUM(InBucket01) + SUM(InBucket2) + SUM(InBucket3) + SUM(InBucket4) + SUM(InBucket5),
    @CreditBalance = SUM(prepay),
    @Balance = ((SUM(InBucket01) + SUM(InBucket2) + SUM(InBucket3) + SUM(InBucket4) + SUM(InBucket5)) + SUM(prepay))
    from #tmpProgramTotals where programid = @programid and routeid = @routeid
    UPDATE
    #tmpAR2
    SET
    ProgramInBucket01 = @InBucket01Total,
    ProgramInBucket2 = @InBucket2Total,
    ProgramInBucket3 = @InBucket3Total,
    ProgramInBucket4 = @InBucket4Total,
    ProgramInBucket5 = @InBucket5Total,
    ProgramDebit = @DebitBalance,
    ProgramCredit = @CreditBalance,
    ProgramBalance = @Balance
    WHERE
    programid = @programid
    AND routeid = @routeid
    delete #tmpProgramTotals where programid = @programid and routeid = @routeid
    END
    DROP TABLE #tmpProgramTotals
    CREATE TABLE #tmpIncludedprepay (paymentid int)
    SELECT
    INTO
    #tmpProgramCredits
    FROM
    #tmpAR2
    WHILE (select COUNT(*) from #tmpProgramCredits) > 0
    BEGIN
    select top 1 @programid = programid, @routeid = routeid from #tmpProgramCredits
    declare @programcreditbalance money
    select @programcreditbalance = ProgramCredit from #tmpAR2 where programid = @programid and routeid = @routeid
    while @programcreditbalance < 0
    BEGIN
    declare @creditamount money
    declare @paymentid int
    select top 1 @creditamount = prepay, @paymentid = prepayid
    from #tmpAR2
    where programid = @programid and routeid = @routeid
    and prepayid <> 0 and prepayid not in (select paymentid from #tmpIncludedprepay)
    and prepay < 0
    order by transactiondate desc
    insert into #tmpIncludedprepay values (@paymentid)
    if @programcreditbalance - @creditamount > 0
    BEGIN
    UPDATE
    #tmpAR2
    SET
    prepay = @programcreditbalance
    WHERE
    prepayid = @paymentid
    END
    set @programcreditbalance = @programcreditbalance - @creditamount
    END
    delete #tmpProgramCredits where programid = @programid and routeid = @routeid
    END
    DROP TABLE #tmpProgramCredits
    DELETE FROM #tmpAR2
    WHERE prepayid <> 0 AND prepayid not in (select paymentid from #tmpIncludedprepay)
    DROP TABLE #tmpIncludedprepay
    SELECT
    acct.accountid,
    acct.accountnum,
    br.branchid,
    br.branchname,
    r.routeid,
    r.routename,
    CASE scontact.businessname WHEN '' THEN scontact.lastname + '. ' + scontact.firstname ELSE scontact.businessname END as Name,
    sphone.phonenumber,
    CASE WHEN prog.canceldate is not null THEN 'Cancelled'
    ELSE CASE WHEN prog.pendingcanceldate is not null THEN 'Pending Cancel'
    ELSE CASE WHEN prog.warrantyexpirationdate <= @asofdate THEN 'Expired'
    ELSE 'Active' END
    END
    END as programstatus,
    CASE WHEN prog.canceldate is not null THEN 3
    ELSE CASE WHEN prog.pendingcanceldate is not null THEN 4
    ELSE CASE WHEN prog.warrantyexpirationdate <= @asofdate THEN 2
    ELSE 1 END
    END
    END as programstatus_indicator,
    prog.programid,
    convert(varchar, transactiondate, 101) as transactiondate,
    transactiondescription,
    eventname,
    (CASE WHEN prepay <> 0 then prepay else InBucket01 END) as InBucket01,
    InBucket2,
    InBucket3,
    InBucket4,
    InBucket5,
    ProgramDebit,
    ProgramCredit,
    ProgramBalance,
    ProgramInBucket01,
    ProgramInBucket2,
    ProgramInBucket3,
    ProgramInBucket4,
    ProgramInBucket5,
    RouteInBucket01,
    RouteInBucket2,
    RouteInBucket3,
    RouteInBucket4,
    RouteInBucket5,
    RouteDebit,
    RouteCredit,
    RouteBalance,
    BranchInBucket01,
    BranchInBucket2,
    BranchInBucket3,
    BranchInBucket4,
    BranchInBucket5,
    BranchDebit,
    BranchCredit,
    BranchBalance,
    Detail = 1,
    Age = CASE @ageperiod
    WHEN 0 THEN 'Debits'
    WHEN 1 THEN 'Credits'
    WHEN 2 THEN '31-60 Days and older'
    WHEN 3 THEN '61-90 Days and older'
    WHEN 4 THEN '91-120 Days and older'
    WHEN 5 THEN '120 Days and older'
    WHEN -999 THEN 'All Balance'
    END,
    PropertyType = CASE sit.propertytype
    WHEN 1 THEN 'Residential'
    WHEN 2 THEN 'Commercial'
    WHEN 5 THEN 'National'
    ELSE ''
    END
    INTO
    #results
    FROM
    #tmpAR2
    INNER JOIN taccount acct ON acct.accountid = #tmpAR2.accountid
    INNER JOIN tbranch br ON br.branchid = #tmpAR2.branchid
    INNER JOIN troute r ON r.routeid = #tmpAR2.routeid
    INNER JOIN tprogram prog ON prog.programid = #tmpAR2.programid
    INNER JOIN testimate est ON est.estimateid = prog.estimateid
    INNER JOIN tsite sit ON sit.siteid = est.siteid
    INNER JOIN tcontact scontact on acct.primarycontactid = scontact.contactid
    INNER JOIN taddress saddr on acct.billingaddressid = saddr.addressid
    LEFT JOIN tcontactphonenumber sphone ON scontact.primaryphoneid = sphone.phoneid
    WHERE
    --Debit Balance
    (@ageperiod <> 0 OR ProgramBalance > 0)
    --Credit Balance
    AND (@ageperiod <> 1 OR ProgramBalance < 0)
    --31-60 Days and older
    AND (@ageperiod <> 2 OR (ProgramInBucket2 > 0 or ProgramInBucket3 > 0 or ProgramInBucket4 > 0 or ProgramInBucket5 > 0))
    --61-90 Days and older
    AND (@ageperiod <> 3 OR (ProgramInBucket3 > 0 or ProgramInBucket4 > 0 or ProgramInBucket5 > 0))
    --90 Days and older
    AND (@ageperiod <> 4 OR (ProgramInBucket4 > 0 or ProgramInBucket5 > 0))
    --120 Days and older
    AND (@ageperiod <> 5 OR ProgramInBucket5 > 0)
    -- property type
    AND (@propertytype = -999 OR sit.propertytype = @propertytype)
    --Need to add a line with null values for the timeline if details are not showing
    IF @showdetails = 0
    BEGIN
    INSERT INTO
    #results
    SELECT DISTINCT
    --TFS-8903 .. JL ... 2/12/2014
    accountid,
    accountnum, branchid, branchname, routeid, routename, Name,
    phonenumber, programstatus,programstatus_indicator,programid, null, null, null,
    null, null, null, null, null,
    ProgramDebit,ProgramCredit, ProgramBalance,
    ProgramInBucket01, ProgramInBucket2, ProgramInBucket3, ProgramInBucket4, ProgramInBucket5,
    RouteInBucket01, RouteInBucket2, RouteInBucket3, RouteInBucket4, RouteInBucket5,
    RouteDebit, RouteCredit, RouteBalance,
    BranchInBucket01, BranchInBucket2, BranchInBucket3, BranchInBucket4, BranchInBucket5,
    BranchDebit, BranchCredit, BranchBalance,
    0, Age, PropertyType
    FROM
    #results
    DELETE FROM #results
    WHERE Detail = 1
    END
    IF @programstatus <> -999 AND @programstatus <> 1 -- ACTIVE
    BEGIN
    DELETE r
    FROM
    #results r
    INNER JOIN tprogram p
    ON r.programid = p.programid
    WHERE
    r.programstatus_indicator = 1
    END
    IF @programstatus <> -999 AND @programstatus <> 2 -- Expired
    BEGIN
    DELETE r
    FROM
    #results r
    INNER JOIN tprogram p
    ON r.programid = p.programid
    WHERE
    r.programstatus_indicator = 2
    END
    IF @programstatus <> -999 AND @programstatus <> 3 -- CANCELLED
    BEGIN
    DELETE r
    FROM
    #results r
    INNER JOIN tprogram p
    ON r.programid = p.programid
    WHERE
    r.programstatus_indicator = 3
    END
    IF @programstatus <> -999 AND @programstatus <> 4 -- PENDING CANCEL
    BEGIN
    DELETE r
    FROM
    #results r
    INNER JOIN tprogram p
    ON r.programid = p.programid
    WHERE
    r.programstatus_indicator = 4
    END
    SELECT
    branchid,
    routeid
    INTO
    #branchesRoutes
    FROM
    tbranchroute
    IF @branchid <> -999
    BEGIN
    DELETE FROM #branchesRoutes
    WHERE branchid <> @branchid
    END
    SELECT
    accountid = ISNULL(res.accountid,0),
    accountnum = ISNULL(res.accountnum, ''),
    branchid = b.branchid,
    branchname = b.branchname,
    routeid = r.routeid,
    routename = r.routename,
    Name = ISNULL(Name,''),
    phonenumber,
    programstatus,
    programid = ISNULL(programid,0),
    transactiondate = transactiondate,
    transactiondescription,
    eventname,
    detail0to30 = InBucket01,
    detail31to60 = InBucket2,
    detail61to90 = InBucket3,
    detailOver90 = InBucket4,
    detailOver120 = InBucket5,
    ProgramDebit = ISNULL(ProgramDebit,0),
    ProgramCredit = ISNULL(ProgramCredit,0),
    ProgramBalance = ISNULL(ProgramBalance,0),
    Program0to30 = ISNULL(ProgramInBucket01,0),
    Program31to60 = ISNULL(ProgramInBucket2,0),
    Program61to90 = ISNULL(ProgramInBucket3,0),
    ProgramOver90 = ISNULL(ProgramInBucket4,0),
    ProgramOver120 = ISNULL(ProgramInBucket5,0),
    Route0to30 = ISNULL(RouteInBucket01,0),
    Route31to60 = ISNULL(RouteInBucket2,0),
    Route61to90 = ISNULL(RouteInBucket3,0),
    RouteOver90 = ISNULL(RouteInBucket4,0),
    RouteOver120 = ISNULL(RouteInBucket5,0),
    RouteDebit = ISNULL(RouteDebit,0),
    RouteCredit = ISNULL(RouteCredit,0),
    RouteBalance = ISNULL(RouteBalance,0),
    Branch0to30 = ISNULL(BranchInBucket01,0),
    Branch31to60 = ISNULL(BranchInBucket2,0),
    Branch61to90 = ISNULL(BranchInBucket3,0),
    BranchOver90 = ISNULL(BranchInBucket4,0),
    BranchOver120 = ISNULL(BranchInBucket5,0),
    BranchDebit = ISNULL(BranchDebit,0),
    BranchCredit = ISNULL(BranchCredit,0),
    BranchBalance = ISNULL(BranchBalance,0),
    ISNULL((select top 1 tfinancestatussetup.financestatus
    from tevent inner join tfinancestatussetup on tevent.financestatusid = tfinancestatussetup.financestatusid
    inner join tprogram on tevent.programid = tprogram.programid
    inner join #results r2 on r2.programid = tprogram.programid
    inner join testimate on testimate.estimateid = tprogram.estimateid
    where testimate.accountid = res.accountid
    order by tevent.submitteddate desc), '') as racstatus,
    Detail = ISNULL(Detail,0),
    Age,
    Case
    when (acc.allowautobill = 1) or
    (select count(accp.programid) from taccountebaprogram accp
    where accp.accountid = acc.accountid ) > 0 then 'Auto Pay'
    else ''
    END as StatusNote,
    CASE @sortby
    WHEN 'name' THEN 1
    ELSE 0
    END as Sort,
    PropertyType,
    hasservices = CASE WHEN res.accountid IS NULL THEN 0 ELSE 1 END
    INTO
    #results2
    FROM
    #results res
    inner join taccount acc on acc.accountid=res.accountid
    inner join #branchesRoutes br on br.routeid = res.routeid AND br.branchid = res.branchid
    inner join troute r ON r.routeid = br.routeid
    inner join tbranch b on b.branchid = br.branchid
    --Set Route Totals
    SELECT
    routeid,
    SUM(ProgramInBucket01) as RouteInBucket01,
    SUM(ProgramInBucket2) as RouteInBucket2,
    SUM(ProgramInBucket3) as RouteInBucket3,
    SUM(ProgramInBucket4) as RouteInBucket4,
    SUM(ProgramInBucket5) as RouteInBucket5, --xx
    SUM(ProgramDebit) as RouteDebit,
    SUM(ProgramCredit) as RouteCredit,
    SUM(ProgramBalance) as RouteBalance
    INTO
    #routetotals
    FROM
    (select distinct
    routeid, programid, ProgramInBucket01, ProgramInBucket2, ProgramInBucket3, ProgramInBucket4, ProgramInBucket5, ProgramDebit, ProgramCredit, ProgramBalance
    from
    #results
    ) t
    GROUP BY
    routeid
    UPDATE
    #results2
    SET
    Route0to30 = t.RouteInBucket01,
    Route31to60 = t.RouteInBucket2,
    Route61to90 = t.RouteInBucket3,
    RouteOver90 = t.RouteInBucket4,
    RouteOver120 = t.RouteInBucket5,
    RouteDebit = t.RouteDebit,
    RouteCredit = t.RouteCredit,
    RouteBalance = t.RouteBalance
    FROM
    #results2
    INNER JOIN #routetotals t on t.routeid = #results2.routeid
    --Set Branch Totals
    SELECT
    branchid,
    SUM(Route0to30) as BranchInBucket01,
    SUM(Route31to60) as BranchInBucket2,
    SUM(Route61to90) as BranchInBucket3,
    SUM(RouteOver90) as BranchInBucket4,
    SUM(RouteOver120) as BranchInBucket5,
    SUM(RouteDebit) as BranchDebit,
    SUM(RouteCredit) as BranchCredit,
    SUM(RouteBalance) as BranchBalance
    INTO
    #branchtotals
    FROM
    (select distinct
    branchid, routeid, Route0to30, Route31to60, Route61to90, RouteOver90, RouteOver120, RouteDebit, RouteCredit, RouteBalance
    from
    #results2
    ) t
    GROUP BY
    branchid
    UPDATE
    #results2
    SET
    Branch0to30 = t.BranchInBucket01,
    Branch31to60 = t.BranchInBucket2,
    Branch61to90 = t.BranchInBucket3,
    BranchOver90 = t.BranchInBucket4,
    BranchOver120 = t.BranchInBucket5,
    BranchDebit = t.BranchDebit,
    BranchCredit = t.BranchCredit,
    BranchBalance = t.BranchBalance
    FROM
    #results2
    INNER JOIN #branchtotals t on t.branchid = #results2.branchid
    SELECT * FROM #results2 -- order by routeid, branchid
    drop table #branchesRoutes
    drop table #tmpAR
    drop table #branchtotals
    drop table #routetotals
    drop table #tmpAR2
    drop table #results
    drop table #results2
    drop table #mecs
    END

    Use this tool on my web site:
    http://www.sommarskog.se/sqlutil/sqltrace.html
    The stored procedure sp_sqltrace sets up a trace filtered for you own spid, and accepts a command batch, which in your case is a call to your stored procedure. It will aggregrate the data per statement. This procedure helps you identify what is taking time.
    Erland Sommarskog, SQL Server MVP, [email protected]

  • RE: Need help to improve performance!!

    Hi Experts,
    There is an standard SAP tcode FPREPT  which is to re-print a receipt. The execution of the Query time takes 5+ minutes.
    Can anybody suggest me the best way to improve this and if hlp me with any SAP note available for the same.
    vishal

    Hi,
    Check this note
    Note 607651 - FPREPT/FPY1: Performance for receipt number assignment
    It is a old one for release 471 (FI-CA)
    What is your release ?
    Regards

  • Need help in improving performance of prorating quantities to stores for existing orders

    I have a code written to allocate quantities to stores for an existing order. Suppose there is a supplier order with quantity of 100 and this needs to distributed among 4 stores which has a demand of 50,40,30 and 20. Since total demand not equal to available quantity. the available quantity needs to be allocated to stores using an algorithm.
    ALgorithm is like allocating the stores in small pieces of innersize. Innersize is nothing but
    quantity within the pack of packs i.e. pack has 4 pieces and each pieces internally has 10 pieces,
    this 10 is called innersize.
    While allocating, each store is provided quantities of innersize first and this looping continues
    until available quantity is over
    Ex:
    store1=10
    store2=10
    store3=10
    store4=10
    second time:
    store1=10(old)+10
    store2=10(old)+10
    store3=10(old)+10
    store4=10(old)+10--demand fulfilled
    third time
    store1=20(old)+10
    store2=20(old)+10
    -- available quantity is over and hence stopped.
    My code below-
    =================================================
    int prorate_allocation()
      char *function = "prorate_allocation";
      long t_cnt_st;
      int t_innersize;
      int   t_qty_ordered;
      int t_cnt_lp;
      bool t_complete;
      sql_cursor alloc_cursor;
      EXEC SQL DECLARE c_order CURSOR FOR -- cursor to get orders, item in that, inner size and available qty.
      SELECT oh.order_no,
      ol.item,
      isc.inner_pack_size,
      ol.qty_ordered
      FROM ABRL_ALC_CHG_TEMP_ORDHEAD oh,
      ordloc ol,
      item_supp_country isc
      WHERE oh.order_no=ol.order_no
      AND oh.supplier=isc.supplier
      and ol.item=isc.item
      AND     EXISTS (SELECT 1 FROM abrl_alc_chg_details aacd WHERE oh.order_no=aacd.order_no)
            AND     ol.qty_ordered>0;
      char   v_order_no[10];
      char v_item[25];
      double v_innersize;
      char   v_qty_ordered[12];
      char v_alloc_no[11];
      char v_location[10];
      char v_qty_allocated[12];
      int *store_quantities;
      bool *store_processed_flag;
      EXEC SQL OPEN c_order;
      if (SQL_ERROR_FOUND)
      sprintf(err_data,"CURSOR OPEN: cursor=c_order");
      strcpy(table,"ORDHEAD, ORDLOC, ITEM_SUPP_COUNTRY");
      WRITE_ERROR(SQLCODE,function,table,err_data);
      return(-1);
      EXEC SQL ALLOCATE :alloc_cursor;
      while(1)
      EXEC SQL FETCH c_order INTO :v_order_no,
      :v_item,
      :v_innersize,
      :v_qty_ordered;
      if (SQL_ERROR_FOUND)
      sprintf(err_data,"CURSOR FETCH: cursor=c_order");
      strcpy(table,"ORDHEAD, ORDLOC, ITEM_SUPP_COUNTRY");
      WRITE_ERROR(SQLCODE,function,table,err_data);
      return(-1);
      if (NO_DATA_FOUND) break;
      t_qty_ordered     =atoi(v_qty_ordered);
      t_innersize =(int)v_innersize;
      t_cnt_lp         = t_qty_ordered/t_innersize;
      t_complete =FALSE;
      EXEC SQL SELECT COUNT(*) INTO :t_cnt_st
      FROM abrl_alc_chg_ad ad,
      alloc_header ah
      WHERE ah.alloc_no=ad.alloc_no
      AND   ah.order_no=:v_order_no
      AND   ah.item=:v_item
      AND   ad.qty_allocated!=0;
      if SQL_ERROR_FOUND
                sprintf(err_data,"SELECT: ALLOC_DETAIL, count = %s\n",t_cnt_st);
                strcpy(table,"ALLOC_DETAIL");
                WRITE_ERROR(SQLCODE,function,table,err_data);
                return(-1);
      if (t_cnt_st>0)
      store_quantities=(int *) calloc(t_cnt_st,sizeof(int));
      store_processed_flag=(bool *) calloc(t_cnt_st,sizeof(bool));
      EXEC SQL EXECUTE
      BEGIN
      OPEN :alloc_cursor FOR SELECT ad.alloc_no,
      ad.to_loc,
      ad.qty_allocated
      FROM    alloc_header ah,
      abrl_alc_chg_ad ad
      WHERE   ah.alloc_no=ad.alloc_no
      AND     ah.item=:v_item
      AND     ah.order_no=:v_order_no
      order by ad.qty_allocated desc;
      END;
      END-EXEC;
      while (t_cnt_lp>0)
      EXEC SQL WHENEVER NOT FOUND DO break;
      for(int i=0;i<t_cnt_st;i++)
      EXEC SQL FETCH :alloc_cursor INTO :v_alloc_no,
      :v_location,
      :v_qty_allocated;
      if (store_quantities[i]!=(int)v_qty_allocated)
      store_quantities[i]=store_quantities[i]+t_innersize;
      t_cnt_lp--;
      if (t_cnt_lp==0)
      EXEC SQL CLOSE :alloc_cursor;
      break;
      else
      if(store_processed_flag[i]==FALSE)
      store_processed_flag[i]=TRUE;
      t_cnt_st--;
      if (t_cnt_st==0)
      t_complete=TRUE;
      break;
      if (t_complete==TRUE && t_cnt_lp!=0)
      for (int i=0;i<t_cnt_st;i++)
      store_quantities[i]=store_quantities[i]+v_innersize;
      t_cnt_lp--;
      if (t_cnt_lp==0)
      EXEC SQL CLOSE :alloc_cursor;
      break;
      }/*END OF WHILE*/
      EXEC SQL EXECUTE
      BEGIN
      OPEN :alloc_cursor FOR SELECT ad.alloc_no,
      ad.to_loc,
      ad.qty_allocated
      FROM    alloc_header ah,
      abrl_alc_chg_ad ad
      WHERE   ah.alloc_no=ad.alloc_no
      AND     ah.item=:v_item
      AND     ah.order_no=:v_order_no
      order by ad.qty_allocated desc;
      END;
      END-EXEC;
      EXEC SQL WHENEVER NOT FOUND DO break;
      for (int i=0;i<t_cnt_st;i++)
      EXEC SQL FETCH :alloc_cursor INTO :v_alloc_no,
      :v_location,
      :v_qty_allocated;
      EXEC SQL UPDATE abrl_alc_chg_ad
      SET qty_allocated=:store_quantities[i]
      WHERE to_loc=:v_location
      AND   alloc_no=:v_alloc_no;
      if SQL_ERROR_FOUND
      sprintf(err_data,"UPDATE: ALLOC_DETAIL, location = %s , alloc_no =%s\n", v_location,v_alloc_no);
      strcpy(table,"ALLOC_DETAIL");
      WRITE_ERROR(SQLCODE,function,table,err_data);
      return(-1);
      EXEC SQL UPDATE ABRL_ALC_CHG_DETAILS
      SET PROCESSED='Y'
      WHERE LOCATION=:v_location
      AND   alloc_no=:v_alloc_no
      AND PROCESSED IN ('E','U');
      if SQL_ERROR_FOUND
      sprintf(err_data,"UPDATE: ABRL_ALC_CHG_DETAILS, location = %s , alloc_no =%s\n", v_location,v_alloc_no);
      strcpy(table,"ABRL_ALC_CHG_DETAILS");
      WRITE_ERROR(SQLCODE,function,table,err_data);
      return(-1);
      EXEC SQL COMMIT;
      EXEC SQL CLOSE :alloc_cursor;
      free(store_quantities);
      free(store_processed_flag);
      }/*END OF IF*/
      }/*END OF OUTER WHILE LOOP*/
      EXEC SQL CLOSE c_order;
      if SQL_ERROR_FOUND
      sprintf(err_data,"CURSOR CLOSE: cursor = c_order");
      strcpy(table,"ORDHEAD, ORDLOC, ITEM_SUPP_COUNTRY");
      WRITE_ERROR(SQLCODE,function,table,err_data);
      return(-1);
    return(0);
    } /* end prorate_allocation*/

    I have a code written to allocate quantities to stores for an existing order. Suppose there is a supplier order with quantity of 100 and this needs to distributed among 4 stores which has a demand of 50,40,30 and 20. Since total demand not equal to available quantity. the available quantity needs to be allocated to stores using an algorithm.
    ALgorithm is like allocating the stores in small pieces of innersize. Innersize is nothing but
    quantity within the pack of packs i.e. pack has 4 pieces and each pieces internally has 10 pieces,
    this 10 is called innersize.
    While allocating, each store is provided quantities of innersize first and this looping continues
    until available quantity is over
    Ex:
    store1=10
    store2=10
    store3=10
    store4=10
    second time:
    store1=10(old)+10
    store2=10(old)+10
    store3=10(old)+10
    store4=10(old)+10--demand fulfilled
    third time
    store1=20(old)+10
    store2=20(old)+10
    -- available quantity is over and hence stopped.
    My code below-
    =================================================
    int prorate_allocation()
      char *function = "prorate_allocation";
      long t_cnt_st;
      int t_innersize;
      int   t_qty_ordered;
      int t_cnt_lp;
      bool t_complete;
      sql_cursor alloc_cursor;
      EXEC SQL DECLARE c_order CURSOR FOR -- cursor to get orders, item in that, inner size and available qty.
      SELECT oh.order_no,
      ol.item,
      isc.inner_pack_size,
      ol.qty_ordered
      FROM ABRL_ALC_CHG_TEMP_ORDHEAD oh,
      ordloc ol,
      item_supp_country isc
      WHERE oh.order_no=ol.order_no
      AND oh.supplier=isc.supplier
      and ol.item=isc.item
      AND     EXISTS (SELECT 1 FROM abrl_alc_chg_details aacd WHERE oh.order_no=aacd.order_no)
            AND     ol.qty_ordered>0;
      char   v_order_no[10];
      char v_item[25];
      double v_innersize;
      char   v_qty_ordered[12];
      char v_alloc_no[11];
      char v_location[10];
      char v_qty_allocated[12];
      int *store_quantities;
      bool *store_processed_flag;
      EXEC SQL OPEN c_order;
      if (SQL_ERROR_FOUND)
      sprintf(err_data,"CURSOR OPEN: cursor=c_order");
      strcpy(table,"ORDHEAD, ORDLOC, ITEM_SUPP_COUNTRY");
      WRITE_ERROR(SQLCODE,function,table,err_data);
      return(-1);
      EXEC SQL ALLOCATE :alloc_cursor;
      while(1)
      EXEC SQL FETCH c_order INTO :v_order_no,
      :v_item,
      :v_innersize,
      :v_qty_ordered;
      if (SQL_ERROR_FOUND)
      sprintf(err_data,"CURSOR FETCH: cursor=c_order");
      strcpy(table,"ORDHEAD, ORDLOC, ITEM_SUPP_COUNTRY");
      WRITE_ERROR(SQLCODE,function,table,err_data);
      return(-1);
      if (NO_DATA_FOUND) break;
      t_qty_ordered     =atoi(v_qty_ordered);
      t_innersize =(int)v_innersize;
      t_cnt_lp         = t_qty_ordered/t_innersize;
      t_complete =FALSE;
      EXEC SQL SELECT COUNT(*) INTO :t_cnt_st
      FROM abrl_alc_chg_ad ad,
      alloc_header ah
      WHERE ah.alloc_no=ad.alloc_no
      AND   ah.order_no=:v_order_no
      AND   ah.item=:v_item
      AND   ad.qty_allocated!=0;
      if SQL_ERROR_FOUND
                sprintf(err_data,"SELECT: ALLOC_DETAIL, count = %s\n",t_cnt_st);
                strcpy(table,"ALLOC_DETAIL");
                WRITE_ERROR(SQLCODE,function,table,err_data);
                return(-1);
      if (t_cnt_st>0)
      store_quantities=(int *) calloc(t_cnt_st,sizeof(int));
      store_processed_flag=(bool *) calloc(t_cnt_st,sizeof(bool));
      EXEC SQL EXECUTE
      BEGIN
      OPEN :alloc_cursor FOR SELECT ad.alloc_no,
      ad.to_loc,
      ad.qty_allocated
      FROM    alloc_header ah,
      abrl_alc_chg_ad ad
      WHERE   ah.alloc_no=ad.alloc_no
      AND     ah.item=:v_item
      AND     ah.order_no=:v_order_no
      order by ad.qty_allocated desc;
      END;
      END-EXEC;
      while (t_cnt_lp>0)
      EXEC SQL WHENEVER NOT FOUND DO break;
      for(int i=0;i<t_cnt_st;i++)
      EXEC SQL FETCH :alloc_cursor INTO :v_alloc_no,
      :v_location,
      :v_qty_allocated;
      if (store_quantities[i]!=(int)v_qty_allocated)
      store_quantities[i]=store_quantities[i]+t_innersize;
      t_cnt_lp--;
      if (t_cnt_lp==0)
      EXEC SQL CLOSE :alloc_cursor;
      break;
      else
      if(store_processed_flag[i]==FALSE)
      store_processed_flag[i]=TRUE;
      t_cnt_st--;
      if (t_cnt_st==0)
      t_complete=TRUE;
      break;
      if (t_complete==TRUE && t_cnt_lp!=0)
      for (int i=0;i<t_cnt_st;i++)
      store_quantities[i]=store_quantities[i]+v_innersize;
      t_cnt_lp--;
      if (t_cnt_lp==0)
      EXEC SQL CLOSE :alloc_cursor;
      break;
      }/*END OF WHILE*/
      EXEC SQL EXECUTE
      BEGIN
      OPEN :alloc_cursor FOR SELECT ad.alloc_no,
      ad.to_loc,
      ad.qty_allocated
      FROM    alloc_header ah,
      abrl_alc_chg_ad ad
      WHERE   ah.alloc_no=ad.alloc_no
      AND     ah.item=:v_item
      AND     ah.order_no=:v_order_no
      order by ad.qty_allocated desc;
      END;
      END-EXEC;
      EXEC SQL WHENEVER NOT FOUND DO break;
      for (int i=0;i<t_cnt_st;i++)
      EXEC SQL FETCH :alloc_cursor INTO :v_alloc_no,
      :v_location,
      :v_qty_allocated;
      EXEC SQL UPDATE abrl_alc_chg_ad
      SET qty_allocated=:store_quantities[i]
      WHERE to_loc=:v_location
      AND   alloc_no=:v_alloc_no;
      if SQL_ERROR_FOUND
      sprintf(err_data,"UPDATE: ALLOC_DETAIL, location = %s , alloc_no =%s\n", v_location,v_alloc_no);
      strcpy(table,"ALLOC_DETAIL");
      WRITE_ERROR(SQLCODE,function,table,err_data);
      return(-1);
      EXEC SQL UPDATE ABRL_ALC_CHG_DETAILS
      SET PROCESSED='Y'
      WHERE LOCATION=:v_location
      AND   alloc_no=:v_alloc_no
      AND PROCESSED IN ('E','U');
      if SQL_ERROR_FOUND
      sprintf(err_data,"UPDATE: ABRL_ALC_CHG_DETAILS, location = %s , alloc_no =%s\n", v_location,v_alloc_no);
      strcpy(table,"ABRL_ALC_CHG_DETAILS");
      WRITE_ERROR(SQLCODE,function,table,err_data);
      return(-1);
      EXEC SQL COMMIT;
      EXEC SQL CLOSE :alloc_cursor;
      free(store_quantities);
      free(store_processed_flag);
      }/*END OF IF*/
      }/*END OF OUTER WHILE LOOP*/
      EXEC SQL CLOSE c_order;
      if SQL_ERROR_FOUND
      sprintf(err_data,"CURSOR CLOSE: cursor = c_order");
      strcpy(table,"ORDHEAD, ORDLOC, ITEM_SUPP_COUNTRY");
      WRITE_ERROR(SQLCODE,function,table,err_data);
      return(-1);
    return(0);
    } /* end prorate_allocation*/

  • Need help in improving the performance for the sql query

    Thanks in advance for helping me.
    I was trying to improve the performance of the below query. I tried the following methods used merge instead of update, used bulk collect / Forall update, used ordered hint, created a temp table and upadated the target table using the same. The methods which I used did not improve any performance. The data count which is updated in the target table is 2 million records and the target table has 15 million records.
    Any suggestions or solutions for improving performance are appreciated
    SQL query:
    update targettable tt
    set mnop = 'G',
    where ( x,y,z ) in
    select a.x, a.y,a.z
    from table1 a
    where (a.x, a.y,a.z) not in (
    select b.x,b.y,b.z
    from table2 b
    where 'O' = b.defg
    and mnop = 'P'
    and hijkl = 'UVW';

    987981 wrote:
    I was trying to improve the performance of the below query. I tried the following methods used merge instead of update, used bulk collect / Forall update, used ordered hint, created a temp table and upadated the target table using the same. The methods which I used did not improve any performance. And that meant what? Surely if you spend all that time and effort to try various approaches, it should mean something? Failures are as important teachers as successes. You need to learn from failures too. :-)
    The data count which is updated in the target table is 2 million records and the target table has 15 million records.Tables have rows btw, not records. Database people tend to get upset when rows are called records, as records exist in files and a database is not a mere collection of records and files.
    The failure to find a single faster method with the approaches you tried, points to that you do not know what the actual performance problem is. And without knowing the problem, you still went ahead, guns blazing.
    The very first step in dealing with any software engineering problem, is to identify the problem. Seeing the symptoms (slow performance) is still a long way from problem identification.
    Part of identifying the performance problem, is understanding the workload. Just what does the code task the database to do?
    From your comments, it needs to find 2 million rows from 15 million rows. Change these rows. And then write 2 million rows back to disk.
    That is not a small workload. Simple example. Let's say that the 2 million row find is 1ms/row and the 2 million row write is also 1ms/row. This means a 66 minute workload. Due to the number of rows, an increase in time/row either way, will potentially have 2 million fold impact.
    So where is the performance problem? Time spend finding the 2 million rows (where other tables need to be read, indexes used, etc)? Time spend writing the 2 million rows (where triggers and indexes need to be fired and maintained)? Both?

  • Need help with premiere pro cs6 having performance issues please help

    need help with premiere pro cs6 having performance issues please help

    Welcome to the forum.
    First thing that I would do would be to look at this Adobe KB Article to see if it helps.
    Next, I would try the tips in this ARTICLE.
    If that does not help, a Repair Install would definitely be in order.
    Good luck,
    Hunt

  • Need help troubleshooting poor performance loading cubes

    I need ideas on how to troubleshoot performance issues we are having when loading our infocube.  There are eight infopackages running in parallel to update the cube.  Each infopackage can execute three datapackages at a time.  The load performance is erractic.  For example, if an infopackage needs five datapackages to load the data, data package 1 is sometimes the last one to complete.  Sometimes the slow performance is in the Update Rules processing and other times it is on the Insert into the fact table. 
    Sometimes there are no performance problems and the load completes in 20 mins.  Other times, the loads complete in 1.5+ hours.
    Does anyone know how to tell which server a data package was executed on?  Can someone tell me any transactions to use to monitor the loads while they are running to help pinpoint what the bottleneck is?
    Thanks.
    Regards,
    Ryan

    Some sugegstions:
    1. Collect BW statistics for all the cubes. Goto RSA1 and go to the cube and on tool bar - tools - BW statistics. Check thed boxes to collect both OLAP and WHM.
    2. Activate all the technical content cubes and reports and relevant objects. You will find them if you search with 0BWTC* in the business content.
    3. Start loading data to the Technical content cubes.
    4. There are a few reports out of these statistical cubes and run them and you will get some ideas.
    5. Try  to schedule sequentially instead of parallel loads.
    Ravi Thothadri

  • Performance Issues - Urgent Help Required.

    Hi All,
    I have some performance problems on the application that is running on WLS 6.1
    SP2.
    1. I have a UI (jsp), in which the user can select either single or multiple product
    IDs. If the user just selects one product ID and then submit the request to the
    server the response is faster. However when the user submits multiple product
    IDs, all these are submitted to the server and it takes a longer response time.
    I was just thinking of generating multiple requests in batches (say 5) to optimise
    the performance. If I submit multiple requests, how will i be able to manage the
    response and display in the presentation layer. Any comments / suggestions are
    welcome.
    2. In my application, I have data access objects which fetches the data from the
    Database. After the rows are fetched, these data is processed by business process
    which converts them to java objects and returns them to clients. The business
    process of converting the data fetched from Database to java objects is slow.
    We need to improve the response time. What do we need to do?.
    3. Is there any performance benchmarking info / comparision available between
    WeblogicServer 6.1 and WebLogicServer 7 or any higher versions?.
    Will appreciate any help to address the above problem.
    Regards,
    Renga

    To Really figure whats going on, you need to get some performance numbers,
    more specifically where things are slowing down. It could be anywhere from a
    sql query thats doing a full table scan verses using index, or some method
    somewhere slowing things down, or even something slow on the network. You
    might want to try something like JProbe or OptimizeIt that can profile your
    application and give you slow methods/modules of your application.
    Haider
    "Renganathan" <[email protected]> wrote in message
    news:[email protected]..
    >
    Hi All,
    I have some performance problems on the application that is running on WLS6.1
    SP2.
    1. I have a UI (jsp), in which the user can select either single ormultiple product
    IDs. If the user just selects one product ID and then submit the requestto the
    server the response is faster. However when the user submits multipleproduct
    IDs, all these are submitted to the server and it takes a longer responsetime.
    I was just thinking of generating multiple requests in batches (say 5) tooptimise
    the performance. If I submit multiple requests, how will i be able tomanage the
    response and display in the presentation layer. Any comments / suggestionsare
    welcome.
    2. In my application, I have data access objects which fetches the datafrom the
    Database. After the rows are fetched, these data is processed by businessprocess
    which converts them to java objects and returns them to clients. Thebusiness
    process of converting the data fetched from Database to java objects isslow.
    We need to improve the response time. What do we need to do?.
    3. Is there any performance benchmarking info / comparision availablebetween
    WeblogicServer 6.1 and WebLogicServer 7 or any higher versions?.
    Will appreciate any help to address the above problem.
    Regards,
    Renga

  • Spry Menu Bar issue, NEED HELP...???

    Here is the coding for a menu bar that i created with CS3, for some reason i am having an issue when i open the web page in IE, on firefox and safari it looks fine, the menu drops down to sub menu's fine, but for some reason when i open it in IE, the submenu's show on the very top of the page rather than right below the menu itself, please check my coding and see if there is an issue???
    i ran compatability and there are no issues shown.
    @charset "UTF-8";
    /* SpryMenuBarHorizontal.css - Revision: Spry Preview Release 1.4 */
    /* Copyright (c) 2006. Adobe Systems Incorporated. All rights reserved. */
    LAYOUT INFORMATION: describes box model, positioning, z-order
    /* The outermost container of the Menu Bar, an auto width box with no margin or padding */
    ul.MenuBarHorizontal
        margin: 0;
        padding: 0;
        list-style-type: none;
        font-size: 100%;
        cursor: default;
        width: auto;
    /* Set the active Menu Bar with this class, currently setting z-index to accomodate IE rendering bug: http://therealcrisp.xs4all.nl/meuk/IE-zindexbug.html */
    ul.MenuBarActive
        z-index: 1000;
    /* Menu item containers, position children relative to this container and are a fixed width */
    ul.MenuBarHorizontal li
        margin: 0;
        padding: 0;
        list-style-type: none;
        font-size: 100%;
        position: relative;
        text-align: left;
        cursor: pointer;
        width: 10.4em;
        float: left;
        background-image: url(tab2.png);
    /* Submenus should appear below their parent (top: 0) with a higher z-index, but they are initially off the left side of the screen (-1000em) */
    ul.MenuBarHorizontal ul
        margin: 0;
        padding: 0;
        list-style-type: none;
        font-size: 100%;
        z-index: 1020;
        cursor: default;
        width: 8.2em;
        position: absolute;
        left: -1000em;
        text-decoration: underline;
    /* Submenu that is showing with class designation MenuBarSubmenuVisible, we set left to auto so it comes onto the screen below its parent menu item */
    ul.MenuBarHorizontal ul.MenuBarSubmenuVisible
        left: auto;
        background-image: url(../tab1.png);
    /* Menu item containers are same fixed width as parent */
    ul.MenuBarHorizontal ul li
        width: 8.2em;
    /* Submenus should appear slightly overlapping to the right (95%) and up (-5%) */
    ul.MenuBarHorizontal ul ul
        position: absolute;
        margin: -5% 0 0 95%;
    /* Submenu that is showing with class designation MenuBarSubmenuVisible, we set left to 0 so it comes onto the screen */
    ul.MenuBarHorizontal ul.MenuBarSubmenuVisible ul.MenuBarSubmenuVisible
        left: auto;
        top: 0;
    DESIGN INFORMATION: describes color scheme, borders, fonts
    /* Submenu containers have borders on all sides */
    ul.MenuBarHorizontal ul
    /* Menu items are a light gray block with padding and no text decoration */
    ul.MenuBarHorizontal a
        display: block;
        cursor: default;
        padding: 0.5em 0.75em;
        color: #FFFFFF;
        text-decoration: none;
        border-left-color: #0063bd;
        border-right-color: #0063bd;
        border-right-width: 3px;
        border-left-width: thin;
        font-family: Calibri;
        font-weight: bold;
        font-size: 19px;
    /* Menu items that have mouse over or focus have a blue background and white text */
    ul.MenuBarHorizontal a:hover, ul.MenuBarHorizontal a:focus
        color: #000000;
    /* Menu items that are open with submenus are set to MenuBarItemHover with a blue background and white text */
    ul.MenuBarHorizontal a.MenuBarItemHover, ul.MenuBarHorizontal a.MenuBarItemSubmenuHover, ul.MenuBarHorizontal a.MenuBarSubmenuVisible
        color: #000000;
    SUBMENU INDICATION: styles if there is a submenu under a given menu item
    /* Menu items that have a submenu have the class designation MenuBarItemSubmenu and are set to use a background image positioned on the far left (95%) and centered vertically (50%) */
    ul.MenuBarHorizontal a.MenuBarItemSubmenu
        background-image: url(SpryMenuBarDown.gif);
        background-repeat: no-repeat;
        background-position: 95% 50%;
    /* Menu items that have a submenu have the class designation MenuBarItemSubmenu and are set to use a background image positioned on the far left (95%) and centered vertically (50%) */
    ul.MenuBarHorizontal ul a.MenuBarItemSubmenu
        background-image: url(SpryMenuBarRight.gif);
        background-repeat: no-repeat;
        background-position: 95% 50%;
    /* Menu items that are open with submenus have the class designation MenuBarItemSubmenuHover and are set to use a "hover" background image positioned on the far left (95%) and centered vertically (50%) */
    ul.MenuBarHorizontal a.MenuBarItemSubmenuHover
        background-image: url(SpryMenuBarDownHover.gif);
        background-repeat: no-repeat;
        background-position: 95% 50%;
    /* Menu items that are open with submenus have the class designation MenuBarItemSubmenuHover and are set to use a "hover" background image positioned on the far left (95%) and centered vertically (50%) */
    ul.MenuBarHorizontal ul a.MenuBarItemSubmenuHover
        background-image: url(SpryMenuBarRightHover.gif);
        background-repeat: no-repeat;
        background-position: 95% 50%;
    BROWSER HACKS: the hacks below should not be changed unless you are an expert
    /* HACK FOR IE: to make sure the sub menus show above form controls, we underlay each submenu with an iframe */
    ul.MenuBarHorizontal iframe
        position: absolute;
        z-index: 1010;
    /* HACK FOR IE: to stabilize appearance of menu items; the slash in float is to keep IE 5.0 from parsing */
    @media screen, projection
        ul.MenuBarHorizontal li.MenuBarItemIE
        display: inline-block;
        f\loat: left;
        position: relative;

    Hey gramps, thanks for the info, i have updated my spry framework to 1.6.1 but the problem is still the same, i recreated my menu with the new 1.6 and it still doing the same thing, the submenu's are like vertically reversed... ugh need help.
    here the new code
    @charset "UTF-8";
    /* SpryMenuBarHorizontal.css - version 0.6 - Spry Pre-Release 1.6.1 */
    /* Copyright (c) 2006. Adobe Systems Incorporated. All rights reserved. */
    LAYOUT INFORMATION: describes box model, positioning, z-order
    /* The outermost container of the Menu Bar, an auto width box with no margin or padding */
    ul.MenuBarHorizontal
        margin: 0;
        padding: 0;
        list-style-type: none;
        font-size: 100%;
        cursor: default;
        width: auto;
    /* Set the active Menu Bar with this class, currently setting z-index to accomodate IE rendering bug: http://therealcrisp.xs4all.nl/meuk/IE-zindexbug.html */
    ul.MenuBarActive
        z-index: 1000;
    /* Menu item containers, position children relative to this container and are a fixed width */
    ul.MenuBarHorizontal li
        margin: 0;
        padding: 0;
        list-style-type: none;
        font-size: 100%;
        position: relative;
        text-align: left;
        cursor: pointer;
        width: 10.4em;
        float: left;
    /* Submenus should appear below their parent (top: 0) with a higher z-index, but they are initially off the left side of the screen (-1000em) */
    ul.MenuBarHorizontal ul
        margin: 0;
        padding: 0;
        list-style-type: none;
        font-size: 100%;
        z-index: 1020;
        cursor: default;
        width: 8.2em;
        position: absolute;
        left: -1000em;
    /* Submenu that is showing with class designation MenuBarSubmenuVisible, we set left to auto so it comes onto the screen below its parent menu item */
    ul.MenuBarHorizontal ul.MenuBarSubmenuVisible
        left: auto;
        background-image: url(../tab1.png);
        line-height: 18px;
    /* Menu item containers are same fixed width as parent */
    ul.MenuBarHorizontal ul li
        width: 8.2em;
    /* Submenus should appear slightly overlapping to the right (95%) and up (-5%) */
    ul.MenuBarHorizontal ul ul
        position: absolute;
        margin: -5% 0 0 95%;
    /* Submenu that is showing with class designation MenuBarSubmenuVisible, we set left to 0 so it comes onto the screen */
    ul.MenuBarHorizontal ul.MenuBarSubmenuVisible ul.MenuBarSubmenuVisible
        left: auto;
        top: 0;
    DESIGN INFORMATION: describes color scheme, borders, fonts
    /* Submenu containers have borders on all sides */
    ul.MenuBarHorizontal ul
        border: 1px solid #CCC;
    /* Menu items are a light gray block with padding and no text decoration */
    ul.MenuBarHorizontal a
        display: block;
        cursor: pointer;
        padding: 0.5em 0.75em;
        color: #FFFFFF;
        text-decoration: none;
        font-size: 19px;
        font-family: Calibri;
        font-weight: bolder;
    /* Menu items that have mouse over or focus have a blue background and white text */
    ul.MenuBarHorizontal a:hover, ul.MenuBarHorizontal a:focus
        color: #000000;
    /* Menu items that are open with submenus are set to MenuBarItemHover with a blue background and white text */
    ul.MenuBarHorizontal a.MenuBarItemHover, ul.MenuBarHorizontal a.MenuBarItemSubmenuHover, ul.MenuBarHorizontal a.MenuBarSubmenuVisible
        color: #000000;
    SUBMENU INDICATION: styles if there is a submenu under a given menu item
    /* Menu items that have a submenu have the class designation MenuBarItemSubmenu and are set to use a background image positioned on the far left (95%) and centered vertically (50%) */
    ul.MenuBarHorizontal a.MenuBarItemSubmenu
        background-repeat: no-repeat;
        background-position: 95% 50%;
    /* Menu items that have a submenu have the class designation MenuBarItemSubmenu and are set to use a background image positioned on the far left (95%) and centered vertically (50%) */
    ul.MenuBarHorizontal ul a.MenuBarItemSubmenu
        background-repeat: no-repeat;
        background-position: 95% 50%;
    /* Menu items that are open with submenus have the class designation MenuBarItemSubmenuHover and are set to use a "hover" background image positioned on the far left (95%) and centered vertically (50%) */
    ul.MenuBarHorizontal a.MenuBarItemSubmenuHover
        background-repeat: no-repeat;
        background-position: 95% 50%;
    /* Menu items that are open with submenus have the class designation MenuBarItemSubmenuHover and are set to use a "hover" background image positioned on the far left (95%) and centered vertically (50%) */
    ul.MenuBarHorizontal ul a.MenuBarItemSubmenuHover
        background-repeat: no-repeat;
        background-position: 95% 50%;
    BROWSER HACKS: the hacks below should not be changed unless you are an expert
    /* HACK FOR IE: to make sure the sub menus show above form controls, we underlay each submenu with an iframe */
    ul.MenuBarHorizontal iframe
        position: absolute;
        z-index: 1010;
    /* HACK FOR IE: to stabilize appearance of menu items; the slash in float is to keep IE 5.0 from parsing */
    @media screen, projection
        ul.MenuBarHorizontal li.MenuBarItemIE
        display: inline;
        f\loat: left;

  • Concurrent crystal license timeout Issue, need help.

    Hi,
    My company is using crystal enterprise 10 with 18 concurrent user license.
    However, we often hit out of crystal license issues.
    Does time to wait for exporting crystal reports to excel/pdf takes up licenses?
    Does time to wait for crystal report to be printed or viewed on the web browser takes up licenses?
    We all know that user sessions take up user licenses. 1 user login take up 1 license.
    Does crystal pruning job takes up user licenses too?
    Need help urgently, much appreciated.

    Hi Daren,
    Support on Cystal Enterprise 10 has expired. Make sure that your users are actually logging off and not just closing their browser.
    One user can take up multiple licenses by not logging off or opening multiple browsers to view multiple reports. Scheduled jobs that are running do not take up license, but a user veiwing a historical instance does take up a license.
    In your metrics tab in the Cyrsatl Management Console -> Servers-> cms you should be able to see the active number of sessions- system connections are backend connections between the servers and these do not take up any licenses.
    Best Regards,
    Jadie

  • T400 LCD dim issue - Need help!!

    I'm having a LCD dim issue with a T400. Have changed the LCD panel, LCD cable and systemboard but still having same issue. If i removed the lcd card, then the display is working fine. I've tested the lcd card in another working unit and it's working as well (means the lcd card is working). I use a working lcd card and plug into this T400 but LCD still dim. 
    I've try to switch the problematic lcd cable and lcd panel to a working systemboard and it kills the systemboard. Have try to switch a few things but still unable to find the root cause. Urgently need help on this. Any advice will be appreciated.
    Model : 6475-RM5

    hey bhoh
    i suggest uninstalling your current graphic card driver, let windows install its own generic drivers and see if that makes any difference
    WW Social Media
    Important Note: If you need help, post your question in the forum, and include your system type, model number and OS. Do not post your serial number.
    Did someone help you today? Press the star on the left to thank them with a Kudo!
    If you find a post helpful and it answers your question, please mark it as an "Accepted Solution"!
    Follow @LenovoForums on Twitter!
    Have you checked out the Community Knowledgebase yet?!
    How to send a private message? --> Check out this article.

  • Stuttering flv playback issue- need help asap

    We need help asap. Have a project is due to deliver today (5/14).
    We have a video to go on a dvd-rom, live action with Motion Graphics behind.
    When output is done thru Projector the Motion Graphics stutter as they scroll.
    Here is more technical info:
    Stuttering flv playback issue:
    Prores 422 timeline 29.97fps 1280x720 output from fcp using current settings.
    Mov file is approx 7gb, plays relatively smooth on a mac pro with no raid.
    Frame by frame analysis shows all frames are present with no jumps tears or skips.
    Tried several output paths, programs and settings to create a smooth flv file to no avail.
    We adjusted data rates from 2k, 3.5k, 4k and 8k, no luck
    We adjusted keyframe rates from low to all frames, no luck.
    We tried cs3 flash encoder, cs5 media encoder, squeeze ect, same results.
    Playback in the flash projector seems to choke slightly no matter what we do.
    Have also posted in the Director Forum.
    Any help much appreciated!

    Here are a few ideas off the top of my head:
    Try playing the file using a different xtra, sometimes different ones will work better.  If you have Director 11.5, there is a native flv playback xtra.
    You can build a player easily in Flash using the flvPlayback component, then bring that into Director as a swf.
    Once you have the video in Director, try making the member Direct To Stage (DTS).  If it is already DTS, try making it not DTS.
    Make sure the video is not transparent, and nothing in Director overlaps the video... in fact, when the video is playing, nothing should be moving at all, and try to keep the amount of code that is running to a minimum.
    Try lowering your video's data rate further or try using a different codec.
    Using VBR (Variable Bit Rate) compression often makes the video appear to play smoother.
    Try compressing the flv with different software.  FFMpeg, for example, is free and does a very good job, often better than the Flash Video Encoder that comes with Flash/Creative Suite.

  • Need Help with site performance

    Looking for Help..
    In particular we would like help from experts in ssl, browser experts
    (how browsers handle encryption, de-encryption), iPlanet experts, Sun
    crypto card experts, webdesign for performance experts.
    Our website is hosted on a Sun Enterprise 450 server running Solaris v7
    The machine is hosted at Exodus. These are the following software
    servers that perform the core functions of the website:
    iPlanet Web Server v. 4.1 ( Java server is enabled)
    IBM db2 v. 7.1
    SAA uses SmartSite, a proprietary system developed by Adaptations
    (www.adaptations.com). At the level of individual HTML pages, SmartSite
    uses
    proprietary markup tags and Tcl code embedded in HTML comments to
    publish
    content stored in a database. SmartSite allows for control over when,
    how and
    to whom content appears. It is implemented as a java servlet which
    stores its data on the db2 server and uses a tcl like scripting language
    (jacl- orginally developed by Sun)
    CHALLENGE:
    In late June this year we launched a redesigned website with ssl enabled
    on all pages. (a departure from the previous practice of maintaining
    most of the site on non-secure server and only some pages on a ssl
    server). We also introduced a new website design with greater use of
    images, nested tables and javascript.
    We have found that the introduction of the "secure everywhere" policy
    has had a detrimental effect on the web site user experience, due to
    decreased web server and web browser performance. In other words, the
    site got slower. Specifically, we have
    identified the following problems:
    1. Web server performance degradation. Due to unidentified increases in
    web
    server resource demand caused (probably) by the global usage of SSL, the
    web
    server experienced instability. This was resolved by increasing the
    amount of
    operating system (OS) resources available to the server.
    2. Web browser performance degradation. Several categories are noted:
    2.1. Page load and rendering. Page load and rendering time has
    increased dramatically on the new site, particularly in the case of
    Netscape Navigator. Some of this may be attributed to the usage of SSL.
    Particularly, the rendering time of complex tables and images may be
    markedly slower on slower client machines.
    2.2. Non-caching of content. Web browsers should not cache any content
    derived from https on the local hard disk. The amount of RAM caching
    ability varies form browser to browser, and machine to machine, but is
    generally much less than for disk caching. In addition, some browser may
    not cache content in RAM cache at all. The overall effect of reduced
    caching is increased accesses to the web server to retrieve content.
    This
    will degrade server performance, as it services more content, and also
    web browser performance, as it will spend more time waiting for page
    content before and while rendering it.
    Things that have been attempted to improve performance:
    1) Reducing javascript redundancy (less compiling time required)
    2) Optimizing HTML code (taking out nested tables, hard coding in specs
    where possible to reduce compiling time)
    3) Optimizing page content assembly (reducing routine redundancy,
    enabling things to be compiled ahead of time)
    4) Installing an encryption card (to speed page encryption rate) - was
    removed as it did not seem to improve performance, but seemed to have
    degraded performance

    Fred Martinez wrote:
    Looking for Help..
    In particular we would like help from experts in ssl, browser experts
    (how browsers handle encryption, de-encryption), iPlanet experts, Sun
    crypto card experts, webdesign for performance experts.
    Our website is hosted on a Sun Enterprise 450 server running Solaris v7
    The machine is hosted at Exodus. These are the following software
    servers that perform the core functions of the website:
    iPlanet Web Server v. 4.1 ( Java server is enabled)
    IBM db2 v. 7.1
    SAA uses SmartSite, a proprietary system developed by Adaptations
    (www.adaptations.com). Since I don't see iPlanet's application server in the mix here this (a
    newsgroup
    for performance questions for iAS) is not the newsgroup to ask in.
    Kent

  • RSI Issue: Need help on IBM/Lenovo external keyboards w Trackpoint? Pic

    Need help on IBM/Lenovo external keyboards w Trackpoint? Pic
    I started my journey with Thinkpads on a T42, then T43.. then T61, X61T, R61 & T410 (bought for 2 cousins & they love it), W510 (dads new laptop). I may be a much recent convert but I swear by them now. 
    MAJOR ISSUE: Recently started feeling RSI (Repetitive Stress) & Carpal Tunnel symptoms (already doing stretches.. adjusted the desk.. & finding new adjustable LCD stand) since I am not using the Thinkpad directly... but using it docked with an External keyboard. Lot of Mousing as well. I'd like to go back to Thinkpad FEEL... or atleast have keyboard with a pointing device so my hands dont have to keep moving back n forth. 
    So, it would be great it some of my fellow T4x/T6x/X6x 'ers would guide me a bit on this... share their first hand experience, or what they've seen on these keyboards and feel free to point me to reliable sources of information. 
    Currently this would greatly be use with T61 - Adv Mini Dock - 30" XHD3000 LCD as shown in my signature below. 
    Anyone who has used or know something about one of these Thinkpad related keyboard (ideally both of these to give a comparative response). 
    Which of the following have you used? 
    How was the experience? 
    (Maybe point me to thread with peoples experiences)
    If you've used several, which one do you prefer / recommend? Why? 
    At the moment I have a "slim" BTC 6200C desktop keyboard. It has laptop like scissor keyswitches, so I like it the slim notebook like profile. 
    The way I have positioned my 30" LCD I'd like to be able to keep the keyboard on my lap at times while on my chair and maybe on the desk at times. 
    ThinkPad Full-Size UltraNav USB Keyboard 
    The keyboard and trackpad of the IBM Lenovo Thinkplus USB Keyboard with Ultranav:
    ThinkPad Travel UltraNav USB Keyboard 
    The travel version of the above:
    Newer: 
    ThinkPad USB Keyboard with TrackPoint
    A 2009 replacement for the previous one but not the full keyboard nor wireless: 
    Thinkpads:
    T61 8892-02U: 14.1"SXGA+/2.2C2D/4G/XP|Adv Mini Dock|30" Gateway XHD3000 WQXGA via Dual-link DVI
    X61T 7767-96U: 12.1"SXGA+/1.6C2D/3G/Vista|Ultrabase
    W510 4319-2PU: 15.6"FHD/i7-720QM/4G/Win7Pro64 (for dad)
    T43 1875-DLU: 14.1"XGA/1.7PM-740/1G/XP
    Dell:
    Inspiron 9300: 17"WUXGA/NVidiaGeForce6800/2.2PM/2G/XP (old)

    I had the same issue - had to go to voice command for a few weeks (sucked) wore wrist gards to keep things netural.
    Everything went away when I changed to a USB keyboard with the Ultra nav (I use the track point and disable the pad).
    I've been working like that for 6+ years now... no issues.
    (as a side note, sleeping with wrist guards on helped heal me the fastest.  I had neoprine, with a metal plate in them - from a local drug store)

  • Need pointers to improve performance of a select query to table vbrk

    Hey Folks,
    I have a query , whose performance needs to be tuned , as such:
        SELECT a~vbeln
               a~fkart                    
               a~waerk
               a~fkdat                   
               b~posnr
               b~vgbel
               b~vgpos
               b~matnr
               b~arktx
               b~prctr
               b~txjcd
          INTO TABLE gi_billing_items
          FROM vbrk AS a
          INNER JOIN vbrp AS b
          ON a~vbeln = b~vbeln
          FOR ALL ENTRIES IN gi_sales_items
         WHERE b~vgbel = gi_sales_items-vbeln
           AND b~vgpos  = gi_sales_items-posnr
           AND b~matnr  = gi_sales_items-matnr
           AND b~werks  = gi_sales_items-werks.
    where
    gi_sales_items is an internal table consisting of 278 entries,.
    The result set collected in table gi_billing_items is 200 records
    The total execution time for this query for the afore given data is 72,983 ms with the average time/record being ~ 9,471 ms which is too high.
    When I try to verify the Explain Plan of the query in ST05, in the Access path I see that the performance of Query Block 1 is bad. Query Block 1 is of the QBLOCK_TYPE UNIONA. Its the very first step in the Query execution internally.
    The indexes are defined on participating tables VBRK and VBRP as:
    VBRK~0      MANDT,VBELN
    VBRK~LOC MANDT,LCNUM
    VBRP~0      MANDT,VBELN,POSNR
    VBRP~Z01   FPLNR,MANDT
    VBRP~Z02   MANDT,MATNR,WERKS
    Its clear from the ST05, STAD and SE30 traces that there is a performance issue in this query. Does anyone have any pointers as to how to resolve this issue? Is there a protocol one needs to follow when using the "FOR ALL ENTRIES IN" clause? Or is there a need for any secondary indexes to be created?
    Please let me know
    Thanks and Best Regards,
    Rashmi.

    Hi,
    Try using the VBFA...to get the Invoice number and line item..and then use that value in VBRK...
    * Declare the internal table for T_VBFA.
    IF NOT gi_sales_items[] IS INITIAL.
    SELECT VBELV
                  POSNV
                  VBELN
                  POSNN
                  VBTYP_N
                  INTO TABLE T_VBFA
                  FOR ALL ENTRIES IN gi_sales_items
                  WHERE VBELV = gi_sales_items-VBELN
                  AND       POSNV = gi_sales_items-POSNR
                  AND       VBTYP_N = 'M'.             "Invoice                       ""Added this..
    ENDIF.
    **Add two columns to GI_SALES_ITEMS..to store the VBELN POSNN the data from t_vbfa..let's assume it is VBELN_VF and POSNR_VF
    * Basically merge gi_sales_items AND t_vbfa
    ** Then use that field in
    IF NOT GI_SALES_ITEMS[] IS INITIAL.
          SELECT a~vbeln
               a~fkart                    
               a~waerk
               a~fkdat                   
               b~posnr
               b~vgbel
               b~vgpos
               b~matnr
               b~arktx
               b~prctr
               b~txjcd
          INTO TABLE gi_billing_items
          FROM vbrk AS a
          INNER JOIN vbrp AS b
          ON a~vbeln = b~vbeln
          FOR ALL ENTRIES IN gi_sales_items
          WHERE b~vbeln = gi_sales_items-vbeln_vf   " Change here
           AND b~posnr  = gi_sales_items-posnr_vf     " Change here
           AND b~matnr  = gi_sales_items-matnr
           AND b~werks  = gi_sales_items-werks.
    ENDIF.
    Thanks
    Naren
    Edited by: Narendran Muthukumaran on Oct 15, 2008 11:35 PM

Maybe you are looking for

  • Jabber and Desk Phone Integration

    When stting up "Desk Phone Integration" on cisco Jabber on a test iPhone, Jabber loops forever when verifying account information saying just "verifying...". It never display an error message. It will eventually stop, the "Desk Phone Integration" sta

  • Fax issue with HP OfficeJet 7210 All-in-one

    Hi everyone, I've got an issue with my HP OfficeJet 7210 All-in-one printer/fax (USB connection) I'm under Mac OS X 10.5 (Leopard). When I was under Tiger, my printer/fax worked properly. After the upgrade to Leopard, the printer/fax was still instal

  • How to assign project specific task with the newly created projects ?

    Hi All, I need help. I need to assign project specific tasks (which i will be taking from staging table) other than the default task which are assigned during project creation. How do I proceed with this within same package. I am attaching the code o

  • Lightroom 5 download

    Attempting to dowload trial of Lightroom 5 and it never "opened". I can find the file on my computer but when I try to open nothing happens?

  • Itunes download trouble

    ok when ever i go and down load i tunes 9, it says this An error has occured during the installing of assembly 'microsft.vc80.crt/verison='8.0.50727.4053'.type=''win32'',publickeytoken=''1fc 8b39a1e18e3b'',processorArchitecture=''x86''. please refer