Friday, February 26, 2010

The Brazil Ladies Soccer Team

blackberry meets Abalone

.

3.40m are done!

Tuesday, February 16, 2010

Counter Letter Of Insu

partition tables - Performance increase

There is a new power-Note from SAP, the 1333328 Note: He comes - all the rivalries of the CEOs of Oracle and SAP, despite [1] - an exclusive benefit to all SAP customers that have selected Oracle as underlying DBMS offers Oracle since version 8, the feature of the partitioning of
: Man , a large database table (the reference is recommended as a useful minimum size of 10 gigabytes) are divided into many small blocks, each of which behave like a mini-table: For example you can have their own indices. In which block is a sentence that can be decided on the basis of his data. So you can use a field that contains a date, to monthly or weekly blocks defined. Selections, this Field as a selection criterion mentioned, can be performed much faster, since they generally have access only to a few partitions. More elegant, you can delete old partitions: The command
DROP PARTITION ... the data of a whole week will be deleted instantly. But the usual archiving
DELETE statements (and only this regard, the trust 1,333,328, so that existing preservation programs can continue to function unchanged) is faster by orders of magnitude. be
 To carry out the partitioning, the table must reorganized once again (just "partitioned"). That would the giant tables with hundreds of millions of entries that we have in the eye, a seemingly feasible task, if it was not possible to carry out this work online, so while the table is used productively. This is indeed possible, and the statement defines a new command for the backup and restore tool 
BRSPACE
by which this redefinition can be done online.

For us, unfortunately, still too early for the note - be the required Support Package level, we have in the relevant systems probably only come in the Andean year - but we are looking forward to it! The reference leads the tables
MSEG
,
BDCP
,
CDHDR
& co.
LIPS
,
VBRP
so on. This shows that the authors know their Pappenheimer. These tables are included in our retail systems to the greatest.

Since we did not want to wait until the information is available on our systems, we have the tables of the Retail Information Systems

(RIS) independently made the start, especially our largest info-structure, the table

S520. It has 420 million entries. The primary key consists essentially of the week, the item number and the branch using the table two years are kept in the past should. The mere filing of the (unpartitioned), the periodic table, and compression of the data by product cost the system a week around 103,000 seconds, or about 28 hours. Here one should remember that the S520 only

a table of the RIS (albeit the largest) - there's still more of their ilk ...

needed After partitioning the "archive" [2] with the new program
Z_RIS_PARTITION_REORG

only three seconds!
In three seconds to delete the 4.5 million sets of the oldest calendar week, and for the current week is a new partition created. The performance factor - fair, with only the recent fighting program compared this calculation so the archive without writing programs and the departments compressor - will amount to 1:10 '000 .

addition, there are beneficial secondary effects: For the execution of a
 DELETE statements had 
namely blocks are read into the database buffer to evaluate the where condition. This does not apply to the DROP PARTITION statement

: The buffer is available for other statements. Also, the merchandise category compression program could nevertheless still be accelerated by a factor of 200, since it operates only on the current calendar week and so only one partition must search.

course it was a stroke of luck to start with the
S520
: it has in our system at the database level, no inter-partition secondary indexes: All existing secondary indexes contain the substance used for the partitioning week (
SPWOC
) so that the removal of partition no Index update is necessary. There are other information structures for which we use inter-partition indices. Then it will not take two seconds, but two minutes to delete a partition. But this is still orders of magnitude faster than the current archiving and deletion times. How did

We organized the partitioning programs? The centerpiece is the SAP class
CL_SQL_STATEMENT
. To delete partitions or create, we need the method
execute_ddl (
statement
)
use this class. We have for this purpose, a local abstract superclass
lcl_stmnt
introduced that contains an object of type
CL_SQL_STATEMENT
as delegate. From the upper class for each statement type your own classes are derived, which have the task of substituting in "their" Statement of the current parameters of the call and then the specific statement as a string by calling a method to execute the upper class:

class lcl_stmt definition abstract.
public section.
methods:
constructor importing iv_tablename type tabname.
protected section.
methods:
_execute importing iv_statement type string optional raising cx_sql_exception. data:
gv_statement type string,
       gv_tabname type tabname, 
go_sql_stmt type ref to cl_sql_statement.
endclass.

class lcl_split_partition_stmt definition inheriting from lcl_stmt.
public section.
methods:
constructor importing iv_tablename type tabname,
execute importing iv_next type zora_partition_name iv_lower_than type zora_partition_name raising cx_sql_exception. endclass.
lcl_drop_partition_stmt class definition inheriting from lcl_stmt.
public section.
    methods: constructor importing
    iv_tablename type tabname,
  • execute importing iv_part type zora_partition_name raising cx_sql_exception. endclass.
  • Here, for example, the implementation of the class to delete a partition:
  • lcl_drop_partition_stmt class implementation. constructor method. super-> constructor (iv_tablename = iv_tablename).
  • gv_statement
    = 'alter table & TABLE_NAME' &
  • 'drop partition "PARTITION &"' & 'update index'. ENDMETHOD. "Constructor method execute data:.. Lv_statement type = string
  • lv_statement gv_statement
    replace:...
  • '& PARTITION' iv_part in lv_statement with _execute (lv_statement) ENDMETHOD" execute endclass . "Lcl_drop_partition_stmt IMPLEMENTATION replaced at runtime, the execute () method the partition name as parameter and replaces the drop partition statement. Then the is _execute () method in the upper class is executed, which sends the statement using the class
  • CL_SQL_STATEMENT
    to the database.
  • This small statement classes are based in a global class ZCL_SQL_PARTITIONER
  • , all offered in connection with partitions available database operations:

This class wants to know anything about the procedure for naming the partition. The knowledge should be implemented in the client class, which manages the partitions of a specific table or a family of similar tables. We have written such a client class called
ZCL_RIS_PARTITIONER
for the family of information structures. They have all the day, week or month (generic term: the period) as a key time. The main method reorg () computes this client class period, depending on the type, the names of all periods that fall outside the residence time and then calls methods of the service class
ZCL_SQL_PARTITIONER
to delete these partitions. Second, calculate the next partition name in the future, then again with the help of ZCL_SQL_PARTITIONER s to create a new partition. 1333328 partitioning tool for use yet, but our own moves in this direction are very promising. All SAP users with an Oracle database should consider to partition their biggest database tables. You do not realize just great performance improvements, and if it goes well, probably a relief to be felt through the whole system. not remain

[1] At least in a footnote to mean the now 14-years previous Kenwood Cup unmentioned, a regatta, Hasso Plattner's yacht in the wrecked. Oracle CEO Larry Ellison failed to do so to make his yacht requested assistance from Plattner, preferring to film the unfortunate pleasure yacht. In his anger Plattner let it down his pants to give it at least to spoil this fun: "If you have to have this on your video, when you go home you should feel s - tty about what you did." (See the article in the Sailing World ).
[2] We have found the opportunity that there is a physical archive of RIS structures need not have such legal requirement, so we delete the data may also like. generate

Sunday, February 14, 2010

Kate Playground Toys Free

hits yesterday and today

.
4m now I've raised quite a heavy track, and now I weave these words to me;)
's see when the good part is finished, and then out of it what I'm doing.
.
the way I spin, of course, somewhere has finally come my wool yes * g *
.
Yesterday I received an invitation to the Easter market at the castle Kottingbrunn / LA, I will look to spin there, and of course try some of my works to bring the people.
.
I'm looking forward to it!
.

Thursday, February 11, 2010

Swedish Large Breasts

Generated test code automatically

The automatic test program components that code or formatted data, should consider any expectations on the string level: A
assert_equal ()
is the expected result but wrote down quickly, the code does but inflexible. Small, irrelevant changes in the issuance by the string comparison as an error. For example XML: Often, in an XML document, the order they appear in the same elements names are not important. And almost always, it does not matter whether or how much space is between the elements. The string comparison is for the verification of XML documents, a level too low. To test really the essence of the issue, it is advisable to use a parser for the output format. For standard formats like XML and CSV established pathways with it. For other formats or code lines is not a parser at hand, or he is too powerful for the area to be used. In these cases one can take the trouble take a mini-parser in the infrastructure of the tests, which is just sufficient to verify the expected results. A practical example: I wanted a method called get_where_adrc (protect) by module tests generated from user-made address details a Where condition for selection of the database table ADRC (part of the central address management). This is then later in ABAP Open SQL

used as follows: data: string type lv_where_adrc ... lv_where_adrc = get_where_adrc (is_selections). into table select * from ADRC lt_adrc for all entries in lt_knvk
where eq addrnumber lt_knvk-adrnp_2
and (lv_where_adrc). ... It contains the structure is_selections the user-entered constraints of Selection: The five components
plz
, place , land ,

street and house number the structure are in particular, some of indexed columns Table ADRC shown, but usually searched with a pattern. A typical clause is generated

mc_city1 like '% Beuson NENDAZ%%' and mc_street like '% RUE GASPARD%%' and house_num1 like '% 15%' For each of the five components of a value can be specified or not. That's a total 32 possible combinations of these selections. One could choose equivalence classes of similar tests and test for each class only one representative. It seemed to me the number 32 in this case straightforward enough to play through all the possibilities-performance in a unit test class. I will not discuss whether the generation has been a dynamic where clause for this problem the right design decision. Also I do not question the specific terms that are generated from the selections. An alternative would be rejected after all, for each selection a Range fill with the option CP (contains pattern), all of these rank in the select statement and specify the work to generate the correct statement to let the database interface. Either way, it is in any case
cases in which the supply of ABAP dynamic Where clause is reasonable. I am talking in this blog only a question of how such dynamically generated code parts can be tested sense.
 
The module test class for the method
get_where_adrc ()
should therefore not make a string comparison, as this would be too inflexible. Actually, only to be ensured in every test case that



all selections in the specified Result occur

does not occur is not specified selections in the result,

the component names are mapped to the right column names in the database table,

that the values in the expected manner to a
LIKE
pattern or in a comparison value for
EQ
be mapped

that the individual terms are syntactically lined up correctly with
AND
.


not to be tested, however, occur in what order the individual conditions in the Where clause. Even though space is to act as a separator between each word - but it should not matter what or how much Space stands.

order on failure to have a nice overview, added to which combinations does not work, I use 32 test methods whose name is a concatenation of feature names have been given for the selections:

hausnr_ort_plz method.
gs_sel-house number = '15 '.
gs_sel-location = 'Beuson-Nendaz'.
gs_sel-zip = '1996 '.
gv_where = go_ref-> get_where_for_adrc (gs_sel).
check_where_clause_for ('HAUSNR_ORT_PLZ').
ENDMETHOD. "Hausnr_ort_plz
 
course I have not written down these 32 methods of hand. After looking at the implementation an exemplary test method had become clear, I wrote a Perl program I generated the code of these methods to insert in the ABAP-test class. Here it is: my%

values = (zip => '1996 'place,
=>' Beuson-Nendaz '
country =>' CH ', street
=>' Rue Gaspard ', House No.
=>' 15 ');
my @ names = sort keys% values;
my ($ fieldset, $ generate, $ pos, @ fields);

for $ generate (\\ & generate_method_definition,
\\ & generate_method_implementation fieldset) {
$ = 0;
for (1 .31) {
vec ($ fieldset, 0.8) = $ _;
$ pos = 0;

# The fields fieldset with in $ the bit to take @ fields = grep {vec ($ fieldset, $ pos + +, 1) } @ names; # implementation or definition code generating print & $ generate (@ fields); } }

sub generate_method_implementation { my $ assignments = join "\\ n", map {"gs_sel $ _ = '$ values {$_}'." } @ _;
my $ methname = join '_', @ _;
return sprintf \u0026lt;\u0026lt;METHOD_IMPL, uc ($ methname); $ methname method. $ Assignments check_where_clause_for ('% s').
ENDMETHOD.
METHOD_IMPL } sub generate_method_definition { my $ methname = join '_', @ _; return "$ methname for testing, \\ n"; } generated this script one after the definition and implementation part of the test methods Transfer to the local unit test class. It should be essentially self-explanatory. A special feature is probably the use of the variable $

fieldset bitfield dar. The bit field is the correct data structure for the present education of all subsets of a given basic set: each test is indeed a certain selection specified components of a selection. bit fields are used in Perl with the built-in function
vec ()
. This has the pleasant property that occur on both the left and on the right side of an assignment can be. If they left, the bit field is filled as a string of bits from the specified offset to the right-most value. Is it right, the bit field at the specified offset is read.

The main loop goes through so the numbers from 1 to 31 and transmits them in a bit field. By bit test of the five relevant items is then used to determine which components of the test should be used and which not. Sun 31 test methods arise from the type of above. The 32nd Test method called empty () in the event that absolutely no selections have been handed over, plays a special role and has been implemented by hand. The announced parsing of the generated where clause is now in the central test method
check_where_clause_for (fields) are carried out
: check_where_clause_for method. data: lt_expected_fields type ty_field_exp_tab,
lv_subject type string,
lv_predicate type string,
lv_object type string,
lv_conjunction type string value 'and',
lv_last_conjunction type string,
lv_off type i, type i lv_moff, lv_mlen type i, type string lv_s field-symbols: type \u0026lt;ls_field_exp> ty_field_exp.
* Which fields are expected in the Where condition?
 get_expected_fields (
exporting iv_fields = iv_fields
importing et_expected_fields = lt_expected_fields).

Thurs

lv_last_conjunction = lv_conjunction.

clear: lv_subject, lv_predicate, lv_object, lv_conjunction.

* Mini-Where parser * * Finds atomic conditions of the Where clause such as: * * mc_city1 like '% Beuson NENDAZ%%' and * * and assigns: * * * subject = predicate = mc_city1 like * object =%% Beuson NENDAZ% (without quotes) * conjunction = and (or blank if not applicable) * find regex '\\ s * (\\ w +) \\ s + (like match length lv_mlen ignoring case.
 if sy-subrc ne 0 

* Statement is completed
lv_s = gv_where + lv_off.
lv_s condense.

assert_initial (act = lv_s
msg = 'Unexpected text at end of statement "). exit.
else. * Last
single condition must continue with and assert_equal (act = lv_last_conjunction
exp = 'and'
    msg = 'terms must be separated by and').

  • * unexpected parts of the last condition?
  • if lv_moff> lv_off.
    lv_s = gv_where + lv_off.
  • assert_initial (act = lv_s
    msg = `Statement contains unexpected characters').
  • endif. * offset increment for next iteration lv_off lv_mlen lv_off = +.
  • read table lt_expected_fields assigning \u0026lt;ls_field_exp> table with key = dbname lv_subject. if sy-subrc eq 0th
* Statement prepared Expect
concatenate
`value '`
\u0026lt;ls_field_exp>-exp
`for`
 \u0026lt;ls_field_exp> name-
into gv_msg respecting blanks.

assert_equal (act = lv_object
exp =-exp \u0026lt;ls_field_exp>
msg = gv_msg).
* field was found, delete from table of the expected fields
delete from table lt_expected_fields \u0026lt;ls_field_exp>.

else.
 
* Unexpected field

'unexpected box
lv_subject
concatenate' is selected that does not appear in the selections'
into gv_msg respecting blanks.
fail (gv_msg).

endif.

endif.
ENDDO.

assert_initial (act = lv_last_conjunction msg = 'must come after last term is no longer AND').
assert_initial (act = lt_expected_fields
msg = 'in the SELECT statement is missing fields,' & 'were specified in the selection').

ENDMETHOD. "Check_where_clause_for


core of this mini-parser for Where conditions is a regular expression to basic selection criteria as

mc_city1 like '% Beuson NENDAZ%%' and


fit. He cut such a term in a subject, predicate, object and the optional conjunction

and linking this to the next term if necessary. For the passed list
iv_fields
the selection fields used an internal table
lt_expected_fields
is built with the test expectations. This is like a scratch list after every found term reduced and must be empty at the end (otherwise the statement was larger than expected).

be just Thus, the above expectations tested to check but without white space and order. For example, if this is a new field in the selection of running all existing Tests without errors. One can write down further tests for the new field or generate - only then you have to expand at a point, the table of expectations for the new field.

Of course the tests in more than five degrees of freedom is too unwieldy, we will have to be restricted to a meaningful subset. The mini-parser but still remains useful.

is crucial to implement such a parser with a sense of proportion : He was just as much understanding of SQL as is needed for the tests. Finally, it is only a helper to expectations to consider flexible. The relationship is no longer true if we work on more such Helpers to use as the actual tests.

This is a different situation than with XML - where parser and even their own, again listed in XML validation languages such as Schematron are available, we can use easily to us all to focus on the tests and test expectations.

Tuesday, February 9, 2010

Body Muscle Percentage Average

burgundy purple and violet

.

Ripe and unripe blackberries wait for the interweave






Saturday, February 6, 2010

Registrer On Playerdex

A cloth is finished;)





Thursday, February 4, 2010

Automatic Starters For Bmw



Zopf staining, the resulting color reminds me of an abalone shell .

The yarn has 305 Laufmeter/100g at 3-fold twist.