ΠΡΠΈΠ²Π΅Ρ!
24-25 ΠΈΡΠ½Ρ Π² ΠΠΎΠ²ΠΎΡΠΈΠ±ΠΈΡΡΠΊΠ΅ ΠΏΡΠΎΡΠ»Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡ Highload++ Siberia 2019. ΠΠ°ΡΠΈ ΡΠ΅Π±ΡΡΠ° ΡΠΎΠΆΠ΅ ΡΠ°ΠΌ Π±ΡΠ»ΠΈ
Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ ΠΌΡ Ρ
ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Ρ Π²Π°ΠΌΠΈ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΡΠ΅Π½Π΄Π΅, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°Π½ΠΈΡ Π² Oracle. ΠΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ β 8 Π·Π°Π΄Π°Ρ, Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΈ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅.
ΠΠ°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΊΠ²Π΅Π½ΡΠ° ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°?
create sequence s start with 1;
select s.currval, s.nextval, s.currval, s.nextval, s.currval
from dual
connect by level <= 5;
- 1
- 5
- 10
- 25
- ΠΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ, Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ°
ΠΡΠ²Π΅ΡΠ‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Oracle (ΡΠΈΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· 8.1.6):
Within a single SQL statement, Oracle will increment the sequence only once per row. If a statement contains more than one reference to NEXTVAL for a sequence, Oracle increments the sequence once and returns the same value for all occurrences of NEXTVAL. If a statement contains references to both CURRVAL and NEXTVAL, Oracle increments the sequence and returns the same value for both CURRVAL and NEXTVAL regardless of their order within the statement.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΈΡΠ»Ρ ΡΡΡΠΎΠΊ, ΡΠΎ Π΅ΡΡΡ 5.
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°?
create table t(i integer check (i < 5));
create procedure p(p_from integer, p_to integer) as
begin
for i in p_from .. p_to loop
insert into t values (i);
end loop;
end;
/
exec p(1, 3);
exec p(4, 6);
exec p(7, 9);
- 0
- 3
- 4
- 5
- 6
- 9
ΠΡΠ²Π΅ΡΠ‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Oracle (ΡΠΈΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· 11.2):
Before executing any SQL statement, Oracle marks an implicit savepoint (not available to you). Then, if the statement fails, Oracle rolls it back automatically and returns the applicable error code to SQLCODE in the SQLCA. For example, if an INSERT statement causes an error by trying to insert a duplicate value in a unique index, the statement is rolled back.
ΠΡΠ·ΠΎΠ² Π₯Π Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ single statement. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠ΅ΡΠ²ΡΠΉ Π²ΡΠ·ΠΎΠ² Π₯Π Π±Π»Π°Π³ΠΎΠΏΠΎΠ»ΡΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, Π²ΡΡΠ°Π²ΠΈΠ² ΡΡΠΈ Π·Π°ΠΏΠΈΡΠΈ; Π²ΡΠΎΡΠΎΠΉ Π²ΡΠ·ΠΎΠ² Π₯Π Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΠΈ ΠΎΡΠΊΠ°ΡΡΠ²Π°Π΅Ρ ΡΠ΅ΡΠ²ΡΡΡΡΡ Π·Π°ΠΏΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΏΠ΅Π» Π²ΡΡΠ°Π²ΠΈΡΡ; ΡΡΠ΅ΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, ΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΡΠΈ Π·Π°ΠΏΠΈΡΠΈ.
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°?
create table t(i integer, constraint i_ch check (i < 3));
begin
insert into t values (1);
insert into t values (null);
insert into t values (2);
insert into t values (null);
insert into t values (3);
insert into t values (null);
insert into t values (4);
insert into t values (null);
insert into t values (5);
exception
when others then
dbms_output.put_line('Oops!');
end;
/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
ΠΡΠ²Π΅ΡΠ‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Oracle (ΡΠΈΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· 11.2):
A check constraint lets you specify a condition that each row in the table must satisfy. To satisfy the constraint, each row in the table must make the condition either TRUE or unknown (due to a null). When Oracle evaluates a check constraint condition for a particular row, any column names in the condition refer to the column values in that row.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null ΠΏΡΠΎΠΉΠ΄ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠΉ Π±Π»ΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ ΠΏΠΎΠΏΡΡΠΊΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 3. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π±Π»ΠΎΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΠΎΠ³Π°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΡΠΊΠ°ΡΠ° Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ ΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΎΡΡΠ°Π½ΡΡΡΡ ΡΠ΅ΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ 1, null, 2 ΠΈ ΡΠ½ΠΎΠ²Π° null.
ΠΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π·Π°ΠΉΠΌΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΡΠΌΡ ΠΌΠ΅ΡΡΠ° Π² Π±Π»ΠΎΠΊΠ΅?
create table t (
a char(1 char),
b char(10 char),
c char(100 char),
i number(4),
j number(14),
k number(24),
x varchar2(1 char),
y varchar2(10 char),
z varchar2(100 char));
insert into t (a, b, i, j, x, y)
values ('Y', 'ΠΠ°ΡΡ', 10, 10, 'Π', 'ΠΠ°ΡΡ');
- A ΠΈ X
- B ΠΈ Y
- C ΠΈ K
- C ΠΈ Z
- K ΠΈ Z
- I ΠΈ J
- J ΠΈ X
- ΠΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅
ΠΡΠ²Π΅ΡΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π²ΡΠ΄Π΅ΡΠΆΠΊΠΈ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ (12.1.0.2) ΠΏΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ Π² Oracle.
CHAR Data Type
The CHAR data type specifies a fixed-length character string in the database character set. You specify the database character set when you create your database. Oracle ensures that all values stored in a CHAR column have the length specified by size in the selected length semantics. If you insert a value that is shorter than the column length, then Oracle blank-pads the value to column length.
VARCHAR2 Data Type
The VARCHAR2 data type specifies a variable-length character string in the database character set. You specify the database character set when you create your database. Oracle stores a character value in a VARCHAR2 column exactly as you specify it, without any blank-padding, provided the value does not exceed the length of the column.
NUMBER Data Type
The NUMBER data type stores zero as well as positive and negative fixed numbers with absolute values from 1.0 x 10-130 to but not including 1.0 x 10126. If you specify an arithmetic expression whose value has an absolute value greater than or equal to 1.0 x 10126, then Oracle returns an error. Each NUMBER value requires from 1 to 22 bytes. Taking this into account, the column size in bytes for a particular numeric data value NUMBER(p), where p is the precision of a given value, can be calculated using the following formula: ROUND((length(p)+s)/2))+1 where s equals zero if the number is positive, and s equals 1 if the number is negative.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ Π²ΡΠ΄Π΅ΡΠΆΠΊΡ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π°ΡΡΠ΅Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ NullβΠ·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
A null is the absence of a value in a column. Nulls indicate missing, unknown, or inapplicable data. Nulls are stored in the database if they fall between columns with data values. In these cases, they require 1 byte to store the length of the column (zero). Trailing nulls in a row require no storage because a new row header signals that the remaining columns in the previous row are null. For example, if the last three columns of a table are null, then no data is stored for these columns.
ΠΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ , ΡΡΡΠΎΠΈΠΌ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΡ. Π‘ΡΠΈΡΠ°Π΅ΠΌ, ΡΡΠΎ Π² ΠΠ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° AL32UTF8. Π ΡΡΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ ΡΡΡΡΠΊΠΈΠ΅ Π±ΡΠΊΠ²Ρ Π±ΡΠ΄ΡΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 2 Π±Π°ΠΉΡΠ°.
1) A ΠΈ X, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ a ‘Y’ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 1 Π±Π°ΠΉΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ x βΠβ β 2 Π±Π°ΠΉΡΠ°
2) B ΠΈ Y, βΠΠ°ΡΡβ Π² b Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡΡ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ Π΄ΠΎ 10 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ Π·Π°ΠΉΠΌΡΡ 14 Π±Π°ΠΉΡ, βΠΠ°ΡΡβ Π² d β Π·Π°ΠΉΠΌΠ΅Ρ 8 Π±Π°ΠΉΡ.
3) C ΠΈ K. ΠΠ±Π° ΠΏΠΎΠ»Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL, ΠΏΠΎΡΠ»Π΅ Π½ΠΈΡ
Π΅ΡΡΡ Π·Π½Π°ΡΠ°ΡΠΈΠ΅ ΠΏΠΎΠ»Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΠΎ 1 Π±Π°ΠΉΡΡ.
4) C ΠΈ Z. ΠΠ±Π° ΠΏΠΎΠ»Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL, Π½ΠΎ ΠΏΠΎΠ»Π΅ Z β ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π² ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ΅ΡΡΠ° Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ (0 Π±Π°ΠΉΡ). ΠΠΎΠ»Π΅ Π‘ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 1 Π±Π°ΠΉΡ.
5) K ΠΈ Z. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΡΠ»ΡΡΠ°Ρ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»Π΅ K Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 1 Π±Π°ΠΉΡ, Π² Z β 0.
6) I ΠΈ J. Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΠΎΠ±Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π·Π°ΠΉΠΌΡΡ ΠΏΠΎ 2 Π±Π°ΠΉΡΠ°. ΠΠ»ΠΈΠ½Ρ ΡΡΠΈΡΠ°Π΅ΠΌ ΠΏΠΎ Π²Π·ΡΡΠΎΠΉ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠΎΡΠΌΡΠ»Ρ: round( (1 + 0)/2) +1 = 1 + 1 = 2.
7) J ΠΈ X. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»Π΅ J Π·Π°ΠΉΠΌΠ΅Ρ 2 Π±Π°ΠΉΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»Π΅ X Π·Π°ΠΉΠΌΠ΅Ρ 2 Π±Π°ΠΉΡΠ°.
ΠΡΠΎΠ³ΠΎ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ: Π‘ ΠΈ K, I ΠΈ J, J ΠΈ X.
ΠΠ°ΠΊΠΎΠ² ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ clustering factor Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ° T_I?
create table t (i integer);
insert into t select rownum from dual connect by level <= 10000;
create index t_i on t(i);
- ΠΠΎΡΡΠ΄ΠΊΠ° Π΄Π΅ΡΡΡΠΊΠΎΠ²
- ΠΠΎΡΡΠ΄ΠΊΠ° ΡΠΎΡΠ΅Π½
- ΠΠΎΡΡΠ΄ΠΊΠ° ΡΡΡΡΡ
- ΠΠΎΡΡΠ΄ΠΊΠ° Π΄Π΅ΡΡΡΠΊΠΎΠ² ΡΡΡΡΡ
ΠΡΠ²Π΅ΡΠ‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Oracle (ΡΠΈΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· 12.1):
For a B-tree index, the index clustering factor measures the physical grouping of rows in relation to an index value.
The index clustering factor helps the optimizer decide whether an index scan or full table scan is more efficient for certain queries). A low clustering factor indicates an efficient index scan.
A clustering factor that is close to the number of blocks in a table indicates that the rows are physically ordered in the table blocks by the index key. If the database performs a full table scan, then the database tends to retrieve the rows as they are stored on disk sorted by the index key. A clustering factor that is close to the number of rows indicates that the rows are scattered randomly across the database blocks in relation to the index key. If the database performs a full table scan, then the database would not retrieve rows in any sorted order by this index key.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ clustering factor Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π΅Π½ ΠΈΠ»ΠΈ Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ Π·Π°Π½ΡΡΡΡ Π±Π»ΠΎΠΊΠΎΠ² Π² ΡΠ°Π±Π»ΠΈΡΠ΅. ΠΠ»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π±Π»ΠΎΠΊΠ° Π² 8 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ Π² ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΡΡΡΡΠΈ ΡΠ·ΠΊΠΈΡ number Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π»ΠΎΠΊΠΎΠ², ΠΈ ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ clustering factor Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π΄Π΅ΡΡΡΠΊΠΎΠ².
ΠΡΠΈ ΠΊΠ°ΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ N ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΊΡΠΈΠΏΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΠ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ?
create table t (
a varchar2(N char),
b varchar2(N char),
c varchar2(N char),
d varchar2(N char));
create index t_i on t (a, b, c, d);
- 100
- 200
- 400
- 800
- 1600
- 3200
- 6400
ΠΡΠ²Π΅ΡΠ‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Oracle (ΡΠΈΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· 11.2):
Logical Database Limits
Item
Type of Limit
Limit Value
Indexes
Total size of indexed column
75% of the database block size minus some overhead
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΌΠΌΠ°ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΡΡ 6ΠΠ±. ΠΠ°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ Π±Π°Π·Ρ. ΠΠ»Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ AL32UTF8 ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ» ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 4 Π±Π°ΠΉΡΠ°, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² 6 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ Π² Ρ ΡΠ΄ΡΠ΅ΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡΡ ΠΎΠΊΠΎΠ»ΠΎ 1500 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠΎΡΡΠΎΠΌΡ Oracle Π·Π°ΠΏΡΠ΅ΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΏΡΠΈ N = 400 (ΠΊΠΎΠ³Π΄Π° Π΄Π»ΠΈΠ½Π° ΠΊΠ»ΡΡΠ° Π² Ρ ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅Ρ 1600 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² * 4 Π±Π°ΠΉΡΠ° + Π΄Π»ΠΈΠ½Π° rowid), Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΡΠΈ N = 200 (ΠΈ ΠΌΠ΅Π½ΡΡΠ΅) ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΎΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ INSERT Ρ Ρ ΠΈΠ½ΡΠΎΠΌ APPEND ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ Π² direct-ΡΠ΅ΠΆΠΈΠΌΠ΅. Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ ΠΊ ΡΠ°Π±Π»ΠΈΡΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΠΈΡΠΈΡ ΡΡΠΈΠ³Π³Π΅Ρ?
- ΠΠ°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π² direct-ΡΠ΅ΠΆΠΈΠΌΠ΅, ΡΡΠΈΠ³Π³Π΅Ρ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½
- ΠΠ°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π² direct-ΡΠ΅ΠΆΠΈΠΌΠ΅, Π½ΠΎ ΡΡΠΈΠ³Π³Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π½Π΅ Π±ΡΠ΄Π΅Ρ
- ΠΠ°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π² conventional-ΡΠ΅ΠΆΠΈΠΌΠ΅, ΡΡΠΈΠ³Π³Π΅Ρ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½
- ΠΠ°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π² conventional-ΡΠ΅ΠΆΠΈΠΌΠ΅, Π½ΠΎ ΡΡΠΈΠ³Π³Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π½Π΅ Π±ΡΠ΄Π΅Ρ
- ΠΠ°Π½Π½ΡΠ΅ Π½Π΅ Π±ΡΠ΄ΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ, Π±ΡΠ΄Π΅Ρ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°
ΠΡΠ²Π΅ΡΠ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, ΡΡΠΎ Π²ΠΎΠΏΡΠΎΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π° Π»ΠΎΠ³ΠΈΠΊΡ. ΠΠ»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ° Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» Π±Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ:
- ΠΡΡΠ°Π²ΠΊΠ° Π² direct ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΡΠΌΡΠΌ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ , ΠΌΠΈΠΌΠΎ SQL-Π΄Π²ΠΈΠΆΠΊΠ°, ΡΡΠΎ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΡΡΠΎΠΊΡΡ ΡΠΊΠΎΡΠΎΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΠ³Π³Π΅ΡΠ° Π²Π΅ΡΡΠΌΠ° ΡΠ»ΠΎΠΆΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ ΡΠΌΡΡΠ»Π° Π² ΡΡΠΎΠΌ Π½Π΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΊΠ°ΡΠ΄ΠΈΠ½Π°Π»ΡΠ½ΠΎ Π·Π°ΡΠΎΡΠΌΠΎΠ·ΠΈΡ Π²ΡΡΠ°Π²ΠΊΡ.
- ΠΠ΅Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΠ³Π³Π΅ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π±Π°Π·Ρ Π² ΡΠ΅Π»ΠΎΠΌ (Π΄ΡΡΠ³ΠΈΡ ΡΠ°Π±Π»ΠΈΡ) Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅. ΠΡΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ ΡΠ°Π·ΡΡΡΠΈΡ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΎ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² production.
- ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Π²ΠΎΠΎΠ±ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠ°ΠΊΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°. ΠΠΎ Π·Π΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ APPEND β Ρ ΠΈΠ½Ρ, Π° ΠΎΠ±ΡΠ°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Ρ ΠΈΠ½ΡΠΎΠ² Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π΅ΡΠ»ΠΈ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΆΠ΅ Π½Π΅Ρ β ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±Π΅Π· ΡΡΡΡΠ° Ρ ΠΈΠ½ΡΠ°.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΠΎΡΠ²Π΅Ρ β Π΄Π°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ (SQL) ΡΠ΅ΠΆΠΈΠΌΠ΅, ΡΡΠΈΠ³Π³Π΅Ρ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Oracle (ΡΠΈΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· 8.04):
Violations of the restrictions will cause the statement to execute serially, using the conventional insert path, without warnings or error messages. An exception is the restriction on statements accessing the same table more than once in a transaction, which can cause error messages.
For example, if triggers or referential integrity are present on the table, then the APPEND hint will be ignored when you try to use direct-load INSERT (serial or parallel), as well as the PARALLEL hint or clause, if any.
Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°?
create table t(i integer not null primary key, j integer references t);
create trigger t_a_i after insert on t for each row
declare
pragma autonomous_transaction;
begin
insert into t values (:new.i + 1, :new.i);
commit;
end;
/
insert into t values (1, null);
- Π£ΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
- Π‘Π±ΠΎΠΉ ΠΈΠ·-Π·Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ
- ΠΡΠΈΠ±ΠΊΠ°, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΡΡΡΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
- ΠΡΠΈΠ±ΠΊΠ°, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠ²
- ΠΡΠΈΠ±ΠΊΠ°, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ°
- ΠΡΠΈΠ±ΠΊΠ°, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ
ΠΡΠ²Π΅ΡΠ’Π°Π±Π»ΠΈΡΠ° ΠΈ ΡΡΠΈΠ³Π³Π΅Ρ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΈ ΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ. ΠΠ²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π² ΡΡΠΈΠ³Π³Π΅ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ, ΠΈΠ½Π°ΡΠ΅ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠΎΡΠ»Π΅ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠ΅ ΡΡΠΈΠ³Π³Π΅ΡΠ° ΠΏΡΠΈΠ²Π΅Π»ΠΎ Π±Ρ ΠΊ Π²ΡΡΠ°Π²ΠΊΠ΅ Π²ΡΠΎΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π² ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΠΌ ΡΠ½ΠΎΠ²Π° ΡΡΠ°Π±ΠΎΡΠ°Π» Π±Ρ ΡΡΠΈΠ³Π³Π΅Ρ, Π²ΡΡΠ°Π²ΠΈΠ» Π±Ρ ΡΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΡ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° statement Π½Π΅ ΡΠΏΠ°Π» Π±Ρ ΠΈΠ·-Π·Π° ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΎΠ½ΠΊΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. Π ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΈΠ³Π³Π΅ΡΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π΅ΡΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ commit. ΠΠΎΡΡΠΎΠΌΡ ΡΡΠΈΠ³Π³Π΅Ρ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΠΏΡΡΠ°Π΅ΡΡΡ Π²ΡΡΠ°Π²ΠΈΡΡ Π² ΡΠ°Π±Π»ΠΈΡΡ ΡΡΡΠΎΠΊΡ, ΡΡΡΠ»Π°ΡΡΡΡΡΡ ΠΏΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌΡ ΠΊΠ»ΡΡΡ Π½Π° Π΅ΡΡ Π½Π΅ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠ΅Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΡ. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ (Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½Π°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΆΠ΄ΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅) ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΆΠ΄ΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠ»Π΅ ΡΡΠΈΠ³Π³Π΅ΡΠ°. ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ deadlock ΠΈ ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ β Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½Π°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΎΡΡΡΡΠ΅Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ.
Π’ΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΎΠΏΡΠΎΡΠ΅.
Π‘Π»ΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ?
-
ΠΠ°ΠΊ Π΄Π²Π° ΠΏΠ°Π»ΡΡΠ°, ΡΡΠ°Π·Ρ ΡΠ΅ΡΠΈΠ» Π²ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
-
ΠΠ΅ ΠΎΡΠΎΠ±ΠΎ, ΠΎΡΠΈΠ±ΡΡ Π² ΠΏΠ°ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΠΎΠ².
-
Π Π΅ΡΠΈΠ» ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
-
ΠΠ²Π° ΡΠ°Π·Π° ΡΠ³Π°Π΄Π°Π» ΠΎΡΠ²Π΅Ρ!
-
ΠΠ°ΠΏΠΈΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
ΠΡΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π»ΠΈ 14 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠΎΠ·Π΄Π΅ΡΠΆΠ°Π»ΠΈΡΡ 10 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com