İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

MySQL neden yavaslar

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
SQL sorgulari tablolardan yapilir.

Tablolari, yapilandirilmis dosya gibi dusunebilirsiniz.

Tablo boyu ne kadar kucuk olursa SQL sorgulari o kadar hizli calisir.



+ MySQL o tabloyu acip okur icindeki veriyi bulur size verir.



Basit bir ornek:

Diyelimki MySQL sizsiniz...

1. Notepad ile 5K lik bir dosyayi actiniz. 'Adana Mersin' diye arattirdiniz. Arama sonucundaki tum 'Adana-Mersin' leri Notepad ile actiginiz yeni bir dosyaya koydunuz. Bu islem toplam 1 dakikanizi alsin.

2. Notepad ile 2Mb lik bir dosta actiniz. Sadece dosyanin acilmasi 120 saniye sursun. Arama sonucundaki tum 'Adana-Mersin' leri Notepad ile actiginiz yeni bir dosyaya koydunuz. Bu islem toplam 1 saatinizi alsin.



Sonuc: Tablo boyu buyudukce, harcanan CPU ve I/O artar, sorgu sureleri uzar.



Tablo boyunun buyuyecegini hesaplayan MySQL ve benzeri veritabani yaraticilari, INDEX denen objeleri yaratmislar. Indexi bir tablodaki bir verinin nerede oldugu bilgisini saklayan baska bir dosyadir. Hani kitaplarin basinda hangi konunun hangi sayfada, kitaplarin sonunda hangi kelimenin hangi sayfalarda gectigi yazilirya, iste index odur. Aradiginizi hizlica bulmanizi saglar.



Hizlica bulunca CPU ve I/O harcamasi azalir.



Sonuc: Tablolar uzerinde gereken indexler yok ise buyuyen tablolar fazla CPU ve I/O harcarlar.



Bir SQL sorgusunun performansi: tablo boyuna, tablo uzerindeki indexlere ve kac tablo uzerinde join yapildigina baglidir.



Ek olarak SQL den donen sonuclarin filtrelenmesi "WHERE" sonuclarin daha hizli donmesini saglar ve gereksiz sonuclarin networkte tasinmasini onler.
 

redbaron

0
İyinet Üyesi
Katılım
12 Mayıs 2006
Mesajlar
675
Reaction score
0
6,000 kayıtlı bir db vardı sonuçlar hızlı şekilde ekrana basılıyordu fakat
kayıtları 18,000 e çıkarınca bir kayıtları ikişerli listemesi 3-4 sn almaya başladı bende tamam bunları nasıl hızlandırırız diye araştıyordum bu yazın iyi oldu gerçekten +rep

yalnız devamını bekliyoruz
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
devami

Indexlere SQL sorgulariniza bakarak karar vermelisiniz.

Yani oyle kafadan index yaratilmaz.

Fazla index te zarar verebilir, indexler okuma islemini hizlandirir ama yazma islemini de yavaslatirlar.

Tablolar uzerindeki 'primary key' ler zaten kendiginden indexlidirler. Bunlar icin ek index yaratmaniza gerek yok.

Bu artik biraz fazla detay ve teknik ama anlayabilecekler icin soyluyorum: SQL sorgularinizi "describe" ile inceletip indexlere karar verebilirsiniz.

Ek olarak tecrubeye bagli olarak (benim isim Veritabani uzmanligi) sadece tabloya bakarak basitce (kesin olmamak sarti ile) indexleri tahmin edebilirsiniz.

Ornegin asagidaki tablo icin session_id ve user_id uzerinde index yaratilabilecegini dusunuyorum. session_id uzerinde zaten primary key indexi koyulmus. Ama dogru olan boyle bakip karar vermek degildir. Sorgularin ve Tablolarin incelenmesi esastir.


CREATE TABLE `cpg149_sessions` (
`session_id` varchar(40) NOT lisanssız default '',
`user_id` int(11) default '0',
`time` int(11) default lisanssız,
`remember` int(1) default '0',
PRIMARY KEY (`session_id`)
) TYPE=MyISAM COMMENT='Used to store sessions';
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
devami

"bu indexi her tablo nun basinami koymam gerek?"

Hayir, index tablonun basina yada sonuna konulmaz.

Indexler tablonun kolonlari uzerinde yaratilirlar.

1 tablo uzerinde 1 den fazla index yaratilabilir.

Ornegin su sekildeki bir tablo uzerinde permutasyon olarak 6 adet index yaratilabilir: (7 index mantikli olmaz, sadece bilgi amacli goteriyorum)

CREATE TABLE `cpg149_sessions` (
`session_id` varchar(40) NOT lisanssız default '',
`user_id` int(11) default '0',
`time` int(11) default lisanssız,
)

Indexler:
1. session_id
2. user_id
3. time
4. session_id , user_id
5. session_id , time
6. user_id , time
7. session_id , user_id , time
 

sitemedya

0
İyinet Üyesi
Katılım
11 Kasım 2004
Mesajlar
284
Reaction score
0
iyinetin bahsettikleri mysql, mssql ve diğer DB ler için geçerli ortak payda.

iyinet'in bazı eksikleri var. onları da ben tamamlayım.

Yavaşlık konusunda bir çok etken olmasına rağmen en önemli 2 tanesi şudur:

1. field indexleme. Bunu biraz açalım: kitaptaki fihrist gibi düşünebileceğimiz index, DB pointerin hedef recordu daha çabuk bulmasına yarar. Burada önemli olan, mümkün olduğunca unique field(ler) için index yapılması gerektiği. Düşünülenin aksine, bir tabloda çokca index kullanmak yarar değil zarar getirir.

2. Querynin mükemmel olmaması. Bunun için bolca SQL çalışmanız, araştırmanız gerekir. Çok yapılan bir yanlış olarak şunu diyebiliriz: TOP kullanmamak, SELECT içinde gereksiz fieldları kullanmak, çok çağırın sayfaki query içinde LIKE kullanmak, mantık hataları vs..
 

sitemedya

0
İyinet Üyesi
Katılım
11 Kasım 2004
Mesajlar
284
Reaction score
0
şunları da dikkat etmek gerekir. Büyük boyutlu DB lerde select yapmak yavaşlar. Var ise, büyük boyutlu table i, 2 veya daha fazla table ye bölmek. Örneğin tek bir öğrenci tablosu yerine; öğrenci, notlar diye iki table a bölüp, aralarında relation yaratmak.

Db için bir insert yapmak, bir update yapmaktan daha fazla iş yapmak ve daha fazla zaman harcanması demektir..
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
devami

MySQL, saldim cayira, mevlam kayira bir veritabani degildir, otomobilinize benzer. Duzenli yagini degistireceksiniz. Zamani geldiginde bakimini yaptiracaksiniz. Kaza oldugunda tamir ettireceksiniz...

Mysql e yapilmasi gereken rutin bakimlar:

1. Tablo optimizasyonu:
Neden gerekir?
- Tablolara veri yazildikca ve silindikce PC nizin hard diski gibi icinde bosluklar olusur, bu bosluklari (fragmentation) kapatmaniz icin optimize (defrag) etmelisiniz. Haftada 1 yapilmasinda fayda vardir.
Komut: OPTIMIZE TABLE <tablo adi>

2. Tablo Analizi:
Neden gerekir?
- Indexlerin tablolar hakkinda dogru bilgiye sahip olmalarini ,gereken istatistiklerin toplanmasini saglar. Haftada bir optimizasyonun ardindan yapilmasinda fayda vardir.
Komut: ANALYZE TABLE <tablo adi>

3. Tablo Hasar Kontrolu:
Neden gerekir?
- Bazen tablolar bozulur. Bu bazen uygulamanizin verdigi hata mesajlari ile farkedilir bazen farkedilmez. Ara sira (ayda 1) tablolari kontrol etmekte fayda vardir. Kontrolde sorunlu cikan tablolari 'Tablo Tamiri' ile tamir etmek gerekir.
Komut: CHECK TABLE <tablo adi>

4. Tablo Tamiri:
Neden gerekir?
- Bozulan tablolari tamir etmek icin kullanilir.
Komut: REPAIR TABLE <tablo adi>
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
Basit mysql optimizayon onerileri

1. my.cnf mysql configurasyon dosyanizi optimize edin. MySQL CPU Kullanımı my.cnf optimizasyonu

2. data ve binary lerinizi varsa ayri disklere koyun. MySQL i calistiran dosyalar ile MySQL veritabaninin bulundugu dosyalari (tablolar, indexler vb...) ayri disklere koyun. Mumkunse her disk icin ayri I/O kontrol karti kullanin.

3. MySQL ve PHP+Apache yi mumkunse ayri makinalara kurun. Ancak bu makinalarin ayni frame de olma sartini arayin. Birbirleri ile local/dogrudan bagli olmalari sartini arayin.

4. MySQL icin ne kadar RAM o kadar PERFORMANS sloganini akliniza yazin.

5. MySQL icin server turu CPU lar kullanin Xeon dual Core ornegin. CPU sayiniz en az 2 olsun.

6. MySQL inizin rutin bakinlarini yapan scriptler gelistirin.

7. MySQL inizin rutun yedeklerini (backup) alan scriptler gelistirin. Arada bir ornegin ayda 1 kez dizin bazinda yedek alin. Yani tum mysql dizinini MySQL i kapattiktan sonra "taz cvzf tum_mysql.tzg /var/lib/mysql" seklinde yedekleyin.

8. MySQL ayarlariniz ne kadar iyi olursa olsun kotu kodlama en guclu makineleri durdurmaya yeter. Yavas SQL sorgularinizi asagidaki konfigurasyon (my.cnf) ile tesbit edip duzeltin
[mysqld]
long_query_time=3
log-slow-queries=/var/log/mysql/log-slow-queries.log

9. MySQL verinizi arsivleyin. Gerekmeyen bilgileri aktif veritabaninizdan baska veritabaniniza atin. Ornegin iyinet in 5 sene onceki sayac bilgileri iyinetin ana veritabani yerine iyinet_2002 adli veritananinda saklayin. Boylece tablo boyunu kisaltip az erisilen bilgileri baska bir veritabanina atmis olursunuz. Artik gerekmedigini dusundugunuz verileri dikkatlice silin.

10. MySQL cok guclu ve guvenilir bir veritabanidir. Unutmayin siz ona ne kadar iyi bakarsaniz o da size o kadar iyi bakar :)
 

WhiteKey

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
400
Reaction score
0
Konum
istanbul
performansı arttırmak için en önemli özelliklerden biri hangi alan için hangi tip bilgi saklamanın uygun olduğunu bilmek..

örnegin standar değerleriniz var
"server", "hosting","reseller","proreseller","proreseller1","proreseller2","proreseller3","proreseller4","proreseller5","proreseller6","proreseller7","proreseller8"

bir host firmasının paket isimlerini yukarıdaki şekilde düşünün
bunlara varchar(50) yapanlar bile var varchar yaparak bunlara en az 6 byte ayırmak yerine enum kullanılırsa ? phpmyadmin için
enum seçilip sağına
"server", "hosting","reseller","proreseller","proreseller1","proreseller2","proreseller3","proreseller4","proreseller5","proreseller6","proreseller7","proreseller8"

yazarsanız bu hem performansı arttırır hemde boyutu düşürür.

ama en ömemlisi söylendiği gibi kodlama o kötü olduktan sonra db iyi olmuş çok önemli değil 1 x 0 = 0 gibi birşey :)

enum vb. diğer beri tipleri içinde aşağıdaki adresi kullanabilirsiniz.
http://dev.mysql.com/doc/refman/5.0/en/data-types.html
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
devam

MySQL de tum ayarlari yaptiniz, kodlarinizi duzelttiniz, yeterince belleginiz var , indexlerinizi yaratip SQL lerinizi duzelttiniz....
Hersey hizli ve guzel calisiyor.

MySQL i turbo moduna almaya hazirmisiniz?

Aslinda turbo modu diye bir mod yok ama asagidaki islemleri yaptiginizda MySQL cok daha iyi, sayfalarinizin ne kadar hizli acildigini gozlerinizle farkedebileceksiniz.

Buradaki amac disk I/O sunu en aza indirerek, bellekten en fazla faydayi saglamaktir.

Turbo 1.

key_buffer:
key_buffer index keylerinin RAM de yani bellekte saklanmasini saglar. Bir tur index cache i diyebilirsiniz.
Cok yogun calisan bir bilgisayarin en pahali yaptigi islem disk I/O sudur. Cunku en yavas yapilan islem disk I/O sudur. Bellek disk'e gore yuzlerce/binlerce kat daha hizlidir.
MySQL in disk yerine bellek kullanmasini saglayarak, I/O islemlerini en az 100 kat hizlandirmis olursunuz.

key_buffer my.cnf icinde yer alir.

my.cnf
-------

[mysqld]
...
...
key_buffer = 256Mb
...
...

Tavsiye edilen key_buffer degeri Bellek boyunuz / 4 dur.

1Gb lik bir server icin 256Mb iyi bir degerdir.

Ancak toplam indexlerinizin buyuklugu 256Mb dan az ise bu bellegi bosa harcamak anlamina gelir.


Turbo 2.

query_cache

MySQL de yaptiginiz sorgularin sonuclarinin saklandigi cache e verilen addir.
Bu deger normalde my.cnf icinde belirtilmez yani kapalidir.

Ozlellikle sikca kullanilan sorgularin sonuclarinin, cache de saklanmasi, disk I/O sunun azaltacak ve sonuclarin hemen bellekten okunmasini saglayacaktir.

Dikkat edilmesi gereken SQL sorgularinizin buyuk kucuk harf farki olmamasi.

Ornegin:

"Select ad, soyad from kullanici where kullanici_kod = 100"
ile
"SELECT ad, soyad from kullanici WHERE kullanici_kod = 100"

ayni SQL kodu olmasina karsin query cache bu kodlari farkli sanar.

Ayni sorgulari hep ayni buyuk-kucuk harf uyumu ile yazmaniz query cache optimize sekilde kullanmanizi saglar.

query cache my.cnf icinde yer alir.

my.cnf
-------

[mysqld]
...
...
query_cache_type = 1
query_cache_size = 32M
...
...

32Mb baslamak icin cok uygun. Tavsiyem 64Mb in ustune cikmayin.
 

Mywedding

1
İyinet Üyesi
Katılım
26 Eylül 2006
Mesajlar
5,893
Reaction score
96
Konum
www.odatv.com
benim /etc/ nin içinde "my.cfg" yok , my.cnf var
icon_shock.gif
 

Mywedding

1
İyinet Üyesi
Katılım
26 Eylül 2006
Mesajlar
5,893
Reaction score
96
Konum
www.odatv.com
key_buffer:
key_buffer index keylerinin RAM de yani bellekte saklanmasini saglar. Bir tur index cache i diyebilirsiniz.
Cok yogun calisan bir bilgisayarin en pahali yaptigi islem disk I/O sudur. Cunku en yavas yapilan islem disk I/O sudur. Bellek disk'e gore yuzlerce/binlerce kat daha hizlidir.
MySQL in disk yerine bellek kullanmasini saglayarak, I/O islemlerini en az 100 kat hizlandirmis olursunuz.

key_buffer my.cnf icinde yer alir.

my.cnf
-------

[mysqld]
...
...
key_buffer = 256Mb
...
...

Tavsiye edilen key_buffer degeri Bellek boyunuz / 4 dur.

1Gb lik bir server icin 256Mb iyi bir degerdir.

Ancak toplam indexlerinizin buyuklugu 256Mb dan az ise bu bellegi bosa harcamak anlamina gelir. .

indexlerin buyuklugu derken , sql buyuklugumuzle aynı şey olabilirmi dediginiz.
yani benim sql ler toplamı , 30mb bile değil..
 

estranged

0
İyinet Üyesi
Katılım
27 Aralık 2007
Mesajlar
18
Reaction score
0
Konum
Istanbul
indexlerin buyuklugu derken , sql buyuklugumuzle aynı şey olabilirmi dediginiz.
yani benim sql ler toplamı , 30mb bile değil..

Hayır sql büyüklüğü değildir indexler, zaten herşeyden önce db'ler veritabanında sql olarak saklanmaz, sql sizin dbnizi import edebilmenizi sağlayan komutları içeren bir dosyadır.

Burada bahsedilen indexler mysql klasörünüzdeki (cpanel serverlarda /var/lib/mysql) .MYI uzantılı dosyaların toplamıdır. Key buffer'ı bunların toplamı kadar belirlersek sunucunun üstünden büyük yük kaldırmış oluruz, artık bunları her seferinde hard diskten okumak yerine RAM'dan okur.

MYI uzantılarının toplamından biraz daha fazla bir miktar belirlemek akıllıca olacaktır. MYI'ların toplamı 100mb ise 128mb key buffer belirlemek gibi..

find /var/lib/mysql/ -name *.MYI | xargs du -sch

ssh'den bu komutu girerek bulabilirsiniz MYI boyutlarını.
 

Mywedding

1
İyinet Üyesi
Katılım
26 Eylül 2006
Mesajlar
5,893
Reaction score
96
Konum
www.odatv.com
teşekkürler, sonuç şu;
5.9M total

keybuffer ne yapmalıyız ?
Hayır sql büyüklüğü değildir indexler, zaten herşeyden önce db'ler veritabanında sql olarak saklanmaz, sql sizin dbnizi import edebilmenizi sağlayan komutları içeren bir dosyadır.

Burada bahsedilen indexler mysql klasörünüzdeki (cpanel serverlarda /var/lib/mysql) .MYI uzantılı dosyaların toplamıdır. Key buffer'ı bunların toplamı kadar belirlersek sunucunun üstünden büyük yük kaldırmış oluruz, artık bunları her seferinde hard diskten okumak yerine RAM'dan okur.

MYI uzantılarının toplamından biraz daha fazla bir miktar belirlemek akıllıca olacaktır. MYI'ların toplamı 100mb ise 128mb key buffer belirlemek gibi..

find /var/lib/mysql/ -name *.MYI | xargs du -sch

ssh'den bu komutu girerek bulabilirsiniz MYI boyutlarını.
 

estranged

0
İyinet Üyesi
Katılım
27 Aralık 2007
Mesajlar
18
Reaction score
0
Konum
Istanbul
Şimdilik 8-10 MB yetecektir ama mysql verilerinizin büyüme hızına bağlı olarak ne kadar süre yeteceği değişir, düzenli olarak kontrol edip ona göre ayarlama yapmak gerekir. En iyisi tuning-premier.sh ile bakıp tüm ayarları oradaki verilere göre yapmak.
 

Mywedding

1
İyinet Üyesi
Katılım
26 Eylül 2006
Mesajlar
5,893
Reaction score
96
Konum
www.odatv.com
Şimdilik 8-10 MB yetecektir ama mysql verilerinizin büyüme hızına bağlı olarak ne kadar süre yeteceği değişir, düzenli olarak kontrol edip ona göre ayarlama yapmak gerekir. En iyisi tuning-premier.sh ile bakıp tüm ayarları oradaki verilere göre yapmak.

-- MYSQL PERFORMANCE TUNING PRIMER --
- By: Matthew Montgomery -

MySQL Version 5.0.27 i686

Uptime = 15 days 2 hrs 46 min 50 sec
Avg. qps = 34
Total Questions = 45383444
Threads Connected = 5

Server has been running for over 48hrs.
It should be safe to follow these recommendations

To find out more information on how each of these
runtime variables effects performance visit:
http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
Visit http://www.mysql.com/products/enterprise/advisors.html
for info about MySQL's Enterprise Monitoring and Advisory Service

SLOW QUERIES
Current long_query_time = 10 sec.
You have 603 out of 45383538 that take longer than 10 sec. to complete
The slow query log is NOT enabled.
Your long_query_time may be too high, I typically set this under 5 sec.

WORKER THREADS
Current thread_cache_size = 384
Current threads_cached = 38
Current threads_per_sec = 0
Historic threads_per_sec = 0
Your thread_cache_size is fine

MAX CONNECTIONS
Current max_connections = 650
Current threads_connected = 8
Historic max_used_connections = 46
The number of used connections is 7% of the configured maximum.
You are using less than 10% of your configured max_connections.
Lowering max_connections could help to avoid an over-allocation of memory
See "MEMORY USAGE" section to make sure you are not over-allocating

MEMORY USAGE
Max Memory Ever Allocated : 327 M
Configured Max Per-thread Buffers : 2 G
Configured Max Global Buffers : 170 M
Configured Max Memory Limit : 2 G
Physical Memory : 1.48 G

Max memory limit exceeds 90% of physical memory

KEY BUFFER
Current MyISAM index space = 5 M
Current key_buffer_size = 128 M
Key cache miss rate is 1 : 59115
Key buffer fill ratio = 2.00 %
Your key_buffer_size seems to be too high.
Perhaps you can use these resources elsewhere

QUERY CACHE
Query cache is enabled
Current query_cache_size = 32 M
Current query_cache_used = 11 M
Current query_cache_limit = 4 M
Current Query cache Memory fill ratio = 34.78 %
Current query_cache_min_res_unit = 4 K
Query Cache is 15 % fragmented
Run "FLUSH QUERY CACHE" periodically to defragment the query cache memory
If you have many small queries lower 'query_cache_min_res_unit' to reduce fragmentation.
MySQL won't cache query results that are larger than query_cache_limit in size

SORT OPERATIONS
Current sort_buffer_size = 2 M
Current record/read_rnd_buffer_size = 1020 K
Sort buffer seems to be fine

JOINS
Current join_buffer_size = 132.00 K
You have had 1703 queries where a join could not use an index properly
You should enable "log-queries-not-using-indexes"
Then look for non indexed joins in the slow query log.
If you are unable to optimize your queries you may want to increase your
join_buffer_size to accommodate larger joins in one pass.

Note! This script will still suggest raising the join_buffer_size when
ANY joins not using indexes are found.

OPEN FILES LIMIT
Current open_files_limit = 3660 files
The open_files_limit should typically be set to at least 2x-3x
that of table_cache if you have heavy MyISAM usage.
Your open_files_limit value seems to be fine

TABLE CACHE
Current table_cache value = 1500 tables
You have a total of 315 tables
You have 377 open tables.
The table_cache value seems to be fine

TEMP TABLES
Current max_heap_table_size = 255 M
Current tmp_table_size = 256 M
Of 178556 temp tables, 68% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
Perhaps you should increase your tmp_table_size and/or max_heap_table_size
to reduce the number of disk-based temporary tables
Note! BLOB and TEXT columns are not allow in memory tables.
If you are using these columns raising these values might not impact your
ratio of on disk temp tables.

TABLE SCANS
Current read_buffer_size = 128 K
Current table scan ratio = 40 : 1
read_buffer_size seems to be fine

TABLE LOCKING
Current Lock Wait ratio = 1 : 544
You may benefit from selective use of InnoDB.
If you have a high concurrency of inserts on Dynamic row-length tables
consider setting 'concurrent_insert=2'.

[root@server ~]#
 

estranged

0
İyinet Üyesi
Katılım
27 Aralık 2007
Mesajlar
18
Reaction score
0
Konum
Istanbul
Şimdilik sadece bu değerleri değiştirip 48 saat sonra sciripti tekrar çaliştirip bakalim.

long_query_time = 4
max_connections = 300 (myslq 15 gündür çalışıyor ama en fazla yapilan connection 46, bunu düşürün kaynakları boşa harcamayın diyor, 300 iyidir)
key_buffer_size = 10 MB (dediğim gibi orada da yazıyor 256mb key buffer belirlenmiş ama sadece %2 si kullanıyor gereksiz ram harcaması, sizin için 10 mb yeterlidir)
join_buffer_size = 512.00 K
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Üst