2010-12-04 41 views
0

Salut les amis
J'ai une application qui stocke des milliers de fichiers texte dans la base de données avec une moyenne de 3 Ko chacun. et une autre table contenant de brèves informations les concernant qui ont été recherchées plus fréquemment. avec 140 000 enregistrements, les performances de ma base de données sont trop lentes.Besoin d'un commentaire d'expert sur la décision de stockage DB ou base de fichier

Je pensais que je pourrais stocker ces fichiers sur le disque qui réduisent la taille de ma base de données d'environ 80%. ces fichiers sont stockés uniquement à des fins d'affichage (lire le contenu du fichier et l'affichage) mais pas pour toute opération de base de données sur eux. mais mon site a environ 1000 utilisateurs et je crains que si je stocke ces fichiers sur le disque, il devient pire (augmentation des opérations d'E/S disque, lecture de fichiers dans une session différente ne peut pas contrôler la lecture des fichiers dans un fil seulement)

les gars ont une expérience connexe?
Veuillez prendre cette décision pour moi. MERCI MERCI

+0

Quelle est votre configuration de base de données actuelle? Est-ce que cela fonctionne sur un serveur, un poste de travail ou un ordinateur "normal"? – Agos

+0

Vous devez optimiser votre base de données. 140K disques n'est pas beaucoup. – Oded

+0

Vous voudrez peut-être d'abord établir le profil de votre application de production pour voir s'il s'agit réellement de la base de données, de la latence du réseau ou de l'application qui s'y connecte. – odez213

Répondre

1

Je vais prendre votre commentaire Please make this decision for me. THANKS THANKS littéralement.

  • Installez au moins 8 Go de mémoire dans le serveur db (meilleur cache SQL)

    Configurer deux disques comme un miroir et placer le fichier journal pour votre db d'application sur le miroir. Ne pas compresser ce disque (plus rapide fichier journal écrit)

    Configurer 4 disques en RAID 10 et lieu le db sur le Raid 10. Ne pas compresser ce disque (meilleure performance de lecture que RAID 5)

    Configurez un disque unique en tant qu'emplacement du fichier tempDB. Ne pas compresser ce disque (isoler l'activité de tempDB)

    Exécutez uniquement SQL Server sur le serveur.

    Vérifiez que votre base de données dispose des index corrects en inspectant la vue de gestion dynamique de l'index manquant.

    Assurez-vous que db a un plan d'entretien pour réduire la fragmentation et db index

    Extrait et recharger chacun des « texte » fichiers de la base de données. Avant de charger le fichier texte compresser (zip) le fichier avec l'outil de votre choix . Stockez le fichier "texte" dans un type de données varbinary .Configurer l'application pour décompresser le fichier avant l'affichage (réduire le disque IO pour SQL pour stocker « texte » et réseau io au client)

    Benchmark votre application avec un nombre connu d'utilisateurs et recherche

    Comparer votre référence avec les valeurs réelles pendant l'utilisation du client

    Surveiller l'attente de disque, réseau IO et régulièrement.

Si vous avez encore des performances médiocres, contactez un administrateur de base de données SQL pour évaluer votre système. Je crois que performanceDBA sur ce site est dans le secteur des contrats.

2

Sans beaucoup plus d'informations, je vous suggérerais d'examiner plus en profondeur d'où vient le problème de performance. Vos requêtes sont efficaces, y a-t-il des index pour soutenir vos requêtes.

En ce qui concerne le stockage des fichiers dans la base de données, c'est intéressant. Je ne peux donner que mon opinion personnelle sur ce qui est en règle générale je préfère stocker les fichiers sur disque et simplement stocker la référence au fichier. chemin dans la base de données. Mais il existe de nombreux avantages/inconvénients à considérer ici, une chose est que vos sauvegardes devront couvrir plus que la sauvegarde de la base de données.

+0

Merci pour votre opinion, je suis là pour ça. Je suis d'accord avec vous, mais j'ai peur des IO disque lourds (la sauvegarde n'est pas ma principale préoccupation, maintenant). avez-vous une expérience réelle à ce sujet? – Ehsan

+0

J'utilise Lucene pour la recherche et à partir de son résultat, je demande à la base de données (sur le champ PK) d'aller chercher l'enregistrement. pas d'indexation, ni de requête complexe impliquée. mon moteur Lucene recherche en moins de 80ms mais les résultats sont lents lentement – Ehsan

+0

@Ehsan, je n'ai aucune expérience avec Lucene, mais j'ai de l'expérience avec le stockage de grandes quantités de documents qui sont référencés à partir de la base de données. Dans mon cas, les documents sont de grands documents et sont conservés en mémoire dédiée en dehors de la base de données, sans aucun problème. –