Maverick,
Thanks for the first piece of code, now for the rest.
What are the declarations of Stable1, Stable2, Stable3, Stable4? (If non-standard, what is your table definition?)
What indexes are on tables used?
What is the code in the function this.changeComments()?
What is the code for the function TOI_SpecialTokens::find?
What is the code for the function TOI_PrimitiveDataTypes::find?
To try and speed up this piece of code:
Why are you using RecID as part of your select statement?
What are you trying to achieve in this piece of code?
Have you modified the update function on the table, ie requiring the use of doUpdate?
Barry.
-----Original Message-----
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Maverick
Sent: Friday, 6 January 2006 6:16 PM
To: [email protected]
Subject: Re: [development-axapta] Performance Issue
Stable1 consists of millions of records. And I have to do conditional updates for every record.
ttsbegin;
while select forupdate STable1 index RecIdx
{
if(stable1.TokenType==TOITokenType::Comments)
{
this.changeComments(stable1);
}
//ISS00019 starts
if(TOI_SpecialTokens::find(STable1.TokenName))
{
STable3.clear();
select firstonly STable3 index RecIdx
where STable3.RecId > STable1.RecId &&
Stable3.TokenName == ")";
STable4.clear();
while select forupdate STable4 index RecIdx
where Stable4.RecId > STable1.RecId &&
Stable4.RecId < STable3.RecId &&
Stable4.TokenType != TOITokenType::Operator
{
STable4.TokenType = TOITokenType::SpecialToken;
STable4.doUpdate();
}
}
//ISS00019 ends
if(stable1.TokenName==".")
{
stable2.clear();
select firstonly stable2 Index RecIdx
where stable2.RecId==stable1.RecId+2;
if(stable2.TokenName == "(" ||
stable2.TokenName == "()" )
{
stable2.clear();
select firstonly forupdate stable2 Index RecIdx
where stable2.RecId == stable1.RecId+1;
stable2.TokenType = TOITokenType::MethodName;
stable2.doUpdate();
}
else
{
stable2.clear();
select firstonly forupdate stable2 Index RecIdx
where stable2.RecId == stable1.RecId+1 &&
stable2.TokenType != TOITokenType::Operator;
if(stable2)
{
stable2.TokenType =TOITokenType::FieldName;
stable2.doUpdate();
}
}
}
if(stable1.TokenType==TOITokenType::VariableName)
{
//Case For Index
stable2.clear();
select firstonly stable2 Index RecIdx
where stable2.RecId == stable1.RecId-1;
if(STable2.TokenName == "index" ||
/*ISS00018 START*/
STable2.TokenName == "hint")
/*ISS00018 END*/
{
stable1.TokenType = TOITokenType::IndexName;
stable1.doUpdate();
}
}
//Case For MethodName
if(STable1.TokenName == "(" ||
STable1.TokenName == "()")
{
stable1.TokenType = TOITokenType::Operator;
stable1.doUpdate();
stable2.clear();
select firstonly forupdate stable2
where stable2.RecId == STable1.RecId - 1 &&
stable2.TokenType != TOITokenType::FunctionName &&
stable2.TokenType != TOITokenType::KeyWord;
if(stable2)
{
stable2.TokenType = TOITokenType::MethodName;
stable2.doUpdate();
}
}
//Case for Primitive Types
if(TOI_PrimitiveDataTypes::find(STable1.TokenName))
{
stable1.TokenType = TOITokenType::DictionaryType;
stable1.doUpdate();
}
//Case for Either Method or Enum
if(STable1.TokenName == "::")
{
stable2.clear();
select firstonly stable2
where stable2.RecId == STable1.RecId+2 &&
(stable2.TokenName == "(" ||
stable2.TokenName == "()");
if(!stable2)
{
UpdateSTable.clear();
select firstonly forupdate UpdateSTable
where UpdateSTable.RecId == STable1.RecId+1;
UpdateSTable.TokenType = TOITokenType::EnumValue;
UpdateSTable.doUpdate();
}
UpdateSTable.clear();
select firstonly forupdate UpdateSTable
where UpdateSTable.RecId == STable1.RecId - 1;
UpdateSTable.TokenType = TOITokenType::DictionaryType;
UpdateSTable.doUpdate();
}
}
ttscommit;
I was thinking of breaking this code in several different functions for every condition, what do you suggest ?
Going for select case for every condition will be good or going the way it is , is good?
Maverick
----- Original Message -----
From: Bayliss, Barry
To: [email protected]
Sent: Friday, January 06, 2006 3:39 AM
Subject: RE: [development-axapta] Performance Issue
Maverick,
Can you post the concerned piece of code?
Barry.
-----Original Message-----
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Maverick
Sent: Thursday, 5 January 2006 3:55 PM
To: [email protected]
Subject: Re: [development-axapta] Performance Issue
Thanks Jacob,
In the case of ttscommit:
What if runtime memory gets full and still updates have to be done....Since I think that updates are done in run time memory.
Maverick
----- Original Message -----
From: Jacob Hjelmer Nielsen
To: [email protected]
Sent: Wednesday, January 04, 2006 7:47 PM
Subject: RE: [development-axapta] Performance Issue
Hi
Regarding recordset operations:
Note that this only works if no code exist on the insert/update events methods on the table, otherwise it will fall back to the traditional 1 by 1 insertion/update.
However this can be bypassed by using the skipDataMethods() method -but careful now you must be 100% sure on what you're doing.
Alternatively, you could try using the recordInsertList, this is actually documented in \System Documentation\Classes\RecordInsertList
ttsCommit
Should be called after the last update,
Client/server:
Make sure that your code is running on the server, thus eliminating cross-tier calls.
Primary Index:
I assume you have a primary index!
Cluster Index:
When used, this is often your primary index.
If your primary key's values are consecutive the data is handled ok - however if the values assigned to the primary key are not consecutive every insert will cause the database to reorganize data for optimal fetch of the records afterwards.
If the problem persists, you should tell us a bit more about the environment.
Med venlig hilsen/Best regards
Jacob Hjelmer
thy:development
Søvej 13B
DK-3460 Birkerød
Tlf.: +45 96 170 470
Fax: +45 45 824 544
Mobil: +45 24 474 032
E-mail: [EMAIL PROTECTED]
www.thydevelopment.com <http://www.thydevelopment.com/>
www.x-masterclass.com <http://www.x-masterclass.com/> High-end education program for Axapta developers.
________________________________
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Dilip N
Sent: 4. januar 2006 13:39
To: [email protected]
Subject: Re: [development-axapta] Performance Issue
Maverick:
Try using INSERT_RECORDSET / UPDATE_RECORDSET..This will speed up the operation.
Good luck
Regards,
Dilip
Maverick <[EMAIL PROTECTED]> wrote:
Hi All,
I have some code which is processing thousands of update on the table. This process is doing all the updates on one table. Updates consists of inserting new record and updation of a record.
The process consist of a loop, doing updation on a table on every record conditionally. And this is done several times. And table consists of million of records.
What are the ways to optimize the process. Please do tell me all the points to be taken care in the CODE,TABLE and in the SQL.
Like:
When should TTSCOMMIT be done. If it is done after every update it will take too much time. And if it is after thousands of update, it takes runtime memory.
What about Index, should it be primary OR cluster.
What properties of SQL Server should be set for better updation.
If you would like to put light on any other point, it willl be very helpful.
Thanks
Maverick
[Non-text portions of this message have been removed]
SPONSORED LINKS
Computer part Programming languages Microsoft axapta Support exchange
---------------------------------
YAHOO! GROUPS LINKS
Visit your group "development-axapta" on the web.
To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
---------------------------------
---------------------------------
Yahoo! DSL Something to write home about. Just $16.99/mo. or less
[Non-text portions of this message have been removed]
________________________________
YAHOO! GROUPS LINKS
* Visit your group "development-axapta <http://groups.yahoo.com/group/development-axapta> " on the web.
* To unsubscribe from this group, send an email to:
[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
* Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service <http://docs.yahoo.com/info/terms/> .
________________________________
[Non-text portions of this message have been removed]
------------------------------------------------------------------------------
YAHOO! GROUPS LINKS
a.. Visit your group "development-axapta" on the web.
b.. To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
c.. Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
------------------------------------------------------------------------------
[Non-text portions of this message have been removed]
Yahoo! Groups Links
SPONSORED LINKS Computer part Programming languages Microsoft axapta
Support exchange
------------------------------------------------------------------------------
YAHOO! GROUPS LINKS
a.. Visit your group "development-axapta" on the web.
b.. To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
c.. Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
------------------------------------------------------------------------------
[Non-text portions of this message have been removed]
Yahoo! Groups Links
SPONSORED LINKS
| Computer part | Programming languages | Microsoft axapta |
| Support exchange |
YAHOO! GROUPS LINKS
- Visit your group "development-axapta" on the web.
- To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
- Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.

