martes, 16 de febrero de 2010

Full-Text Search II: Implementar FTS

Vamos con la continuacion del articulo anterior, esta vez viendo como implementar FTS.

Para ello abre el Management Studio y conéctate a la instancia en la que queremos configurar el catalogo.


Abre el editor de consultas y ejecuta:

CREATE FULL TEXT CATALOG EjemploCatalogoFTS

Si FTS no estuviera habilitado para la base de datos recibirás este error:

Msg 7616, Level 16, State 100, Line 1
Full-Text Search is not enabled for the current database. Use sp_fulltext_database to enable full-text search for the database. The functionality to disable and enable full-text search for a database is deprecated. Please change your application.



Para ver si esta activado o no FTS, puedes abrir las propiedades de la base de datos donde queremos habilitarlo. Luego vamos al apartado "files" ahí encontramos una casilla de verificación que habilita FTS "Use full-text indexing".


Si FTS está habilitado el mensaje recibido por el motor será:

Command(s) completed successfully



Si se ha creado satisfactoriamente el catalogo podremos encontrar un archivo con el nombre del catalogo en la ruta por defecto de SQL (c:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\) que se usa para almacenar el catalogo y los índices de los datos.

Después de haber habilitado FTS y de haber creado nuestro primer catalogo, podemos ver el nuevo catalogo usando el explorador de objetos del Management Studio, lo encontramos en "Instancia->Base de Datos->Storage->Full Text Catalogs->Nombre de catalogo". Si no aparece acuérdate de refrescar el Explorador de objetos, si aun así no apareciera puede ser que haya habido algún problema en la creación si es así empezad comprobando los permisos NTFS.

También podemos usar el Management Studio para crear los catálogos pinchando sobre "Full Text Catalogs" con el botón derecho del ratón y clickando sobre "New Full-Text Catalog..."


Se nos abrirá la siguiente ventana en donde podemos rellenar el nombre, la ubicación y otras opciones validas (recordad que si queréis podéis pasar estas opciones una vez completadas al editor de consultas pinchando en la parte de arriba de la ventana donde pone "Script").


Después de crear el catalogo ya lo tenemos todo listo para crear nuestros índices FTS. Antes de crearlos en una tabla tenemos que estar seguros que exista un índice único en la tabla (en otra columna) el cual se usara para mapear los resultados a los registros de la tabla. Para crear nuestro índice FTS usaremos esta sentencia:

CREATE FULLTEXT INDEX ON Complaints(ComplaintDetails)

KEY INDEX PK_Complaints ON EjemploCatalogoFTS

WITH CHANGE_TRACKING AUTO



Fijaros que debemos de proporcionarle la tabla y columna donde queremos crearlo, además de el nombre y el catalogo donde se almacenara. También tenemos que decir si queremos que los cambios en el texto indexado queremos que se propaguen al índice de manera automática, manual o que no se propaguen (AUTO MANUAL OFF). Si pusiéramos manual para propagar esos cambios tendremos que ejecutar la siguiente sentencia, la cual podremos programar para que se haga periódicamente con el asistente para tareas automatizadas:

ALTER FULLTEXT INDEX PK_Complaints START UPDATE POPULATION


Una vez creado el índice vamos a ver como usamos FTS para tener una manera rápida y eficaz de resolver consultas en una columna donde contenemos texto.

Recordemos una de las consultas usadas con el método tradicional:

SELECT * FROM Notes Table WHERE Notes Like ‘%Full-Text Search%'



Esta consulta usando FTS seria así:

SELECT * FROM NotesTable WHERE CONTAINS(Notes, N'Full-Text Search')



Para acabar de completar la manera de usar FTS os aconsejo que os paséis por este enlace de TechNet donde veréis como usar las condiciones de búsqueda SQL en Transact-SQL

Bueno ya sabemos cómo mejorar considerablemente las consultas que incluyen columnas de texto largo. Hemos visto como implementarlo y ponerlo en funcionamiento, espero este articulo os sea de ayuda.

Un Saludo y Hasta Pronto.

lunes, 15 de febrero de 2010

Full-Text Search I: Que es y para que se usa FTS

Introducción:

FTS es una funcionalidad de búsqueda que habilita la manera más rápida y sencilla para la búsqueda de texto dentro de SQL server (Crea un diccionario de palabras). Aunque el concepto de full text search no es nuevo en SQL Server 2008, hay mejoras considerables de gestión y rendimiento en SQL Server 2008.


Full Text Search en SQL Server 2005

SQL Server a través de Transact SQL puede buscar las coincidencias de un valor en los datos aportados. Por ejemplo, en una tabla de la BDD hay una columna llamada Notes, podemos buscar registros que contengan la expresión "Full-Text Search" o los campos que sean iguales a "SQL Server 2008" lo cual sería algo como esto:

SELECT * FROM NotesTable WHERE Notes Like = ‘%Full-Text Search%'

SELECT * FROM NotesTable WHERE Notes = ‘SQL Server 2008'



Las consultas en T-SQL dan un rendimiento óptimo cuando sabemos exactamente lo que estamos buscando. Por Ejemplo, si buscamos un producto en la tabla "products", podríamos usar el campo "ProductCode" en la sentencia SQL:

SELECT * FROM Products WHERE ProductCode = ‘SQL2005EE'



Pero T-SQL no siempre no da los resultados deseados, por ejemplo en la siguiente sentencia:

SELECT * FROM Notes Table WHERE Notes Like ‘%Full-Text Search%'



Esta consulta no listaría por ejemplo los campos que contuvieran la frase de esta manera "Full-Text Index Search". O tampoco si hubiera un doble espacio en la frase.

Podría ser útil haciendo menos exacta la sentencia, por ejemplo:

SELECT * FROM NotesTable WHERE Notes Like ‘%Full%Text%Search%'



Pero una de las cosas más críticas de T-SQL es que tenemos que poner el orden exacto de la consulta. Por ejemplo si tu tabla tuviera un registro que fuera "Searches using Full-Text Indexing", para encontrar el resultado nuestra query debería de ser algo como esto, algo que en la realidad no debería de ser implementado ya que el tiempo de respuesta seria ineficiente:

SELECT * FROM NotesTable WHERE Notes Like ‘%Full%Text%Search%' OR Notes Like ‘%Search%Full%Text%' OR... (Y así sucesivamente hasta tener todas las posibilidades de respuesta cubiertas en la consulta)



Esta consulta seria el camino para encontrar lo que necesitamos pero los usuarios se quejarían de lentitud en este tipo de consultas, ¿cómo lo solucionamos? Bien esto es un problema de indexado.

Los métodos clásicos de indexado usado en las BDD de SQL usarían los índices en una búsqueda usando el Like:

SELECT * FROM NotesTable WHERE Notes Like ‘Full Text Search%'



En esta consulta el índice seria de mucha ayuda pero solo nos serviría para los registros que empiecen por ‘Full Text Search' pero los índices en el campo Notes no serian de utilidad si los registros buscados tuvieran ‘Full Text Search' en medio del texto o al final.

SELECT * FROM NotesTable WHERE Notes Like ‘%Full Text Search%'



Como resultado de la consulta anterior se realizaría un escaneado completo de la tabla lo cual no será lo que queremos si ésta es un una tabla que tenga algunos GB de tamaño.

En las aplicaciones de hoy en día las cosas no son tan claras. Por cada búsqueda en el campo dedicado a ello en la aplicación tendríamos que tener una consulta diferente en función del campo lo cual no es posible. Por lo tanto Transact SQL no nos da la solución a nuestros problemas.

En Microsoft SQL Server tenemos una característica llamada Full-Text Search. Esta característica se habilita a nivel de instancia, de tal manera que una instancia de motor de base de datos SQL Server, tendremos una instancia de motor Full-Text Search.

En el siguiente artículo veremos como implementar FTS.

Un Saludo.

Personalizar los mensajes que nos devuelve Exchange 2007 ante un Error en la entrega.

Buenos Días amigos, de nuevo estoy aquí, en concreto vamos a hablar de una herramienta que nos va a permitir cambiar los mensajes que nos devuelve Exchange a través de la edición de una DLL.



Los pasos a seguir son:

1- Abrir el ejecutable RLQuiked.exe. (Descomprimid RLTOOLS.zip y ejecutar RLTOOLS.exe, esto os creara varios ejecutables en la misma carpeta donde hayáis ejecutado el .exe, y uno de esos es RLQUIKED.exe)

2- Pinchar en "File->Open"

3- Debemos de buscar el DLL llamado "mdbsz.dll" que es donde se encuentra el texto que envía Exchange cuando se ha producido algún error en la entrega de un mensaje, por ejemplo cuando el buzón de destino está lleno, cuando la dirección del destinatario no existe...

4- Buscamos el mensaje que deseamos cambiar y le damos doble click con el ratón.

5- Se nos abre un cuadro de dialogo en el cual tenemos la descripción del mensaje y el texto, donde en "New Text:" Escribiremos le mensaje por el cual queramos substituir el actual.

6- Por ultimo salvamos el documento "File->Save"

*Nota: Antes de realizar este cambio procurar tener una copia del archivo por si las moscas, recordad que en última instancia siempre sois responsables de vuestros sistemas y cualquier precaución siempre será poca.




Hasta la próxima

miércoles, 10 de febrero de 2010

Overclocking...? Qué es y cómo hacerlo

Bueno voy con mi segundo Post, probablemente sea el unico relacionado con Hardware que postee ya que todos iran relacionados con Aplicaciones y SOs. Espero que sea util para alguno de vosotros, ya que a mi me costo bastante aprender a hacer esto sin ayuda de nadie.


Un saludo a todos:

Para aquellos que han oído hablar del OverClocking pero que nunca han sabido lo que es, ya que la gente que entiende sobre esto no suele entretenerse en dar una explicación, voy a explicar que es y porque se hace OverClocking.

Primero deberemos de saber que OverClocking significa hacer funcionar a un dispositivo justo por debajo de su límite, es decir si un procesador que te venden con 2,000 MHZ puede trabajar a 2600, 2500,… en función de cada procesador, esto significa que si en OverClocking el procesador trabaja a 2500 si lo pusiéramos a 2550 el ordenador se volvería inestable. Podemos hacer OverClocking en: Procesador, RAM y tarjeta de video (además de algún dispositivo PCI pero no es recomendable)

En el OverClocking Para tener mayor rendimiento de procesos tocaremos la RAM y el Procesador y si lo que queremos es un mayor rendimiento de gráficos lo haremos con la Tarjeta Grafica.

Hay que hacer hincapié en que el riesgo para el equipo será diferente en función de hasta donde queramos llegar, si no subimos voltaje y la temperatura no sobrepasa los 70º no hay riesgo alguno, si tocamos voltaje pero con una temperatura más controlada sin sobrepasar los 1,4-1,5 V tampoco llegaremos a estropear el procesador aunque subiendo voltaje disminuye un poco el tiempo de vida del procesador. Siempre habrá que respetar las pautas que os indicare en el manual, ya que el OverClocking es de paciencia (no demasiada) ya que hay que ir paso a paso, no podemos subir de repente 500 MHZ porque podría ralentizarnos mas el proceso de encontrar justo ese límite. Antes de hacer OverClocking del procesador tenemos que entender cómo se llega a los MHz resultantes. En la tabla siguiente vemos como se puede llegar a unos MHz
Pasos a Seguir:
Bueno yo os voy a dar los pasos a seguir, hay placas que quizás no os dejen hacer OverClocking, como cada BIOS tiene una configuración solo voy a indicar cada configuración, donde se encuentra en vuestra BIOS será fácil de encontrarlo, si no pudierais encontrarlo y vais a preguntar sobre ellos deberéis de dejar la placa Base que tenéis y la versión de la BIOS.

1 Arrancar el PC y entrar en la BIOS, desplazarnos a la configuración del FSB y observamos cual es el valor que tenemos, en este ejemplo usamos un procesador que según el fabricante funciona a 2ooo MHZ así que cuando vayamos a la configuración del FSB veremos que tienen esta puesto en 200 y con un multiplicador x10, el multiplicador de momento no lo vamos a tocar. Primero mediremos la resistencia del procesador con su voltaje de fábrica. Lo que haremos será subir el FSB 10 MHz guardar y reiniciar, si vemos que el sistema es estable podemos continuar haciendo esto hasta que el sistema se vuelva inestable, en el momento que el sistema se vuelva inestable buscaremos iremos bajando de uno en uno hasta que demos con el punto límite donde el sistema es estable. Una vez conseguido esto estaremos en la parte del OverClocking que es sencilla y donde la mayoría de la gente se queda, no se puede saber cuál será el punto de cada procesador hasta que no lo probemos ya que cada procesador es diferente aunque sea mismo modelo y marca.

2 Si estamos satisfechos con el resultado podemos parar aquí, por ejemplo en el procesador de ejemplo que he usado aguanta hasta 274 de FSB, lo cual nos da 2740 así que al ser un aumento importante lo podríamos dejar aquí, pero claro no lo vamos a hacer porque nuestro afán por llevar al límite este procesador es mayor que eso. Así que vamos a proceder a subir los MHz a los que está trabajando la RAM siguiendo el mismo ejemplo que teníamos antes subir hasta que se vuelva inestable y justo el punto anterior es el que nos interesa. En nuestro caso no hemos podido pasar de 500Mhz, así que lo dejamos así en 500 MHz

3 Ahora volveremos a nuestro procesador y volveremos a repetir el proceso del paso 1 por lo tanto vamos a ver con nuestra nueva velocidad cuanto nos puede dar nuestro Procesador, hemos llegado a 276 de FSB.

4 el siguiente paso para poder seguir subiendo el FSB será bajar las latencias de la RAM, esto no es fácil porque muchas veces como en nuestro caso las latencias ya están al mismo, el sistema de latencia no es sencillo así que para realizar este paso os aconsejo que os informéis a fondo sobre las latencias de las RAM. Si habéis conseguido mejorar las latencias deberéis de repetir el proceso de subir el FSB hasta su punto máximo de rendimiento sin volverse inestable. Bueno en nuestro caso si cambiamos cualquier valor de las latencias se vuelve inestable así que vamos a ver con que podemos continuar para llevar este procesador a su Máximo Rendimiento posible.

5 Si estáis contentos con el resultado obtenido y no queréis disminuir el tiempo de vida de vuestros procesadores, o si veis que vuestra temperatura ya roza el limite este es el punto donde debemos de decidir si continuamos o no, ya que vamos a subir el voltaje de la RAM y eso si disminuye su tiempo de vida. Nosotros vamos a continuar ya que no nos supone un problema que disminuyamos el tiempo de vida de la RAM ya que con lo que avanzan las tecnologías nos quedaremos obsoletos rápidamente. Así que vamos a subir el voltaje de la RAM +0.1V,+0.2V o +0.3V este proceso es delicado porque depende mucho de lo refrigeradas que estén los módulos, nosotros con este voltaje vamos bien no os recomiendo subir más de +o,5V, aunque nosotros como nuestro equipo tiene una muy buena refrigeración inclusive los módulos de RAM lo hemos podido subir al máximo antes de que se volviera inestable y se nos ha quedado en 2,96V bueno esto cada uno lo que se quiera arriesgar ya que no tenemos manera de saber la temperatura de la RAM (nosotros y la mayoría).

6 una vez hecho esto deberemos de volver a subir el FSB a lo máximo que aguante con el valor nuevo de RAM, nosotros ya hemos conseguido llegar a 280 de FSB. Lo cual está muy bien, pero aun nos queda el último paso que es el del voltaje de procesador. Nuestro procesador esta por defecto en 1,4V en este proceso es donde más debemos de vigilar la temperatura del procesador, el limite a menos que tengamos una refrigeración líquida nos lo pondrá la temperatura, intentar que no pase de 60º, para que sea estable cuando esté trabajando a fondo. Ir subiendo de 0,1 en 0,1 mientras que veáis que es estable y que no se calienta demasiado. Nosotros hemos parado en 60º con un voltaje de 2,1. Esto es bastante y aunque no se hubiera calentado hasta 60º sería recomendable no subir más de eso por si las moscas.

7 por ultimo volvemos a subir el FSB Hasta su punto de Máximo rendimiento, nuestro procesador nos ha alcanzado 312 lo cual nos da un rendimiento de 3120Mhz. Una buena cifra la verdad.

Administracion de sistemas Raid desde Windows


Buenas a todos, Bienvendios a este rincon mio dentro de los blogs de Tecnofor, espero que de ahora en adelante se convierta en una de esas URLs que teneis metidas en Favoritos (de IE, Firefox, Opera, Chrome...da lo mismo), La intencion que tengo es ir publicando articulos de caracter tecnico. Para cualquier propuesta, sugerencia, peticion de manual, problema etc.... Contactar conmigo sin ningun tipo de pudor, atendere cada una de las peticiones individualmente y las que sean viables las llevare a cabo, lo mismo con los problemas los cuales intentare resolverlos en el minimo tiempo posible. Para empezar he hecho este how-to sencilito para ir haciendo boca.


Como configurar raid de discos en Windows XP Professional Edition y en Windows Vista Business, Enterprise y Ultimate Edition:
*Nota: El uso de discos dinámicos no está habilitado en Windows XP Home Edition, en Windows Vista Home Basic ni en Windows Vista Home Premium. Como excepción en Windows XP Media Center Edition hay algunos volúmenes disponibles que cuando actualizamos de esta versión a Windows vista Home Premium seguirán estando disponibles.
Introducción:
En este how-to vamos a ver el sistema de discos por software que nos ofrece Microsoft en sus SO.

Éste es una alternativa bastante más económica que los sistemas hardware que tenemos en el mercado ya que no necesitaremos una cabina de discos ni una controladora especifica. Las necesidades varían un poco en función del raid que queramos implementar.

Ahora en Windows tenemos discos básicos (el de siempre) y discos dinámicos, los discos dinámicos en lugar de distribuirse en particiones, se distinguen por volúmenes. Tenemos los siguientes tipos de volumenes:

Volúmenes simples: son igual que las particiones en los discos básicos, el beneficio que nos ofrecen en frente a las particiones clásicas es que podemos extender el espacio del volumen, una vez creado, por el espacio disponible del disco usado.

Volúmenes distribuidos: Los volúmenes distribuidos son como los volúmenes simples pero el espacio estará extendido a mas de un disco físico, de esta manera tendremos una sola letra de unidad en donde antes estábamos obligados usar mas dos como minimo.

Volúmenes seccionados (Raid-0): Para crear volúmenes seccionados deberemos de tener 2 o mas discos de la misma marca, modelo y fabricante, se usa el espacio libre de los discos que usaremos y en todos se ocupara la misma cantidad de espacio, los datos se dividen en bloques y se distribuyen por igual en todos los discos usados y si uno de los discos fuera dañado se perderá la información de todo el volumen. Las ventajas que nos aporta esque multiplicaremos la velocidad de lectura por la cantidad de cabezales que tenemos leyendo los datos. El escenario idóneo para este tipo de raid es uno en el que debamos superponer el rendimiento a la tolerancia a fallos.

Volúmenes reflejados (Raid-1): Deberemos de tener dos discos, lo que pasara cuando creemos un volumen reflejado será tener todos los datos duplicados al otro disco llamado Espejo, en el momento que se rompa el disco que se esta usando deberemos de romper el disco para restaurar el espejo con otro disco nuevo, es recomendable usar dos discos del mismo modelo marca y fabricante.

Volúmenes Raid-5: El raid-5 es un sistema que requiere 3 o mas discos, y este sistema lo que hace es repartir los datos en bloques de tres (o la cantidad de discos que haya en el raid-5) añadiendo a cada bloque información sobre lo que se encuentra en los demás bloques del mismo dato, esto hace que si faltara uno de los bloques se puede restablecer ese dato. Por lo tanto el raid-5 nos aporta un sistema con tolerancia a fallos ya que si uno de los discos fallara se recupera la información de manera trasparente para el usuario (se percibirá una disminución del rendimiento)pudiendo restablecer el sistema raid añadiendo otro disco. Por más discos que añadamos al sistema raid-5 la tolerancia siempre será de un solo disco, haciendo poco recomendable hacer raid-5 con demasiados discos. También existen los raid-6, que en realidad es la misma tecnología que el 5 pero añadiendo un disco en espera, que en caso de que falle uno de los miembros del raid se reconstruye en este disco que estaba en espera, lo que hace que haya la posibilidad de que fallen dos discos y aun sea recuperable el raid.

Procedimiento:
Vamos a poner el ejemplo de cómo realizar un volumen reflejado:

1- pinchamos con el botón derecho sobre mi PC y entramos en administrar.

2- se abrirá la consola de administración de equipos.

3- seleccionamos en el menú izquierdo administración de discos

4- en esta consola podremos observar que en la parte superior tendremos una información en datos de los discos y en la parte inferior lo vemos de manera grafica, lo primero que tenemos que hacer es iniciar el disco que acabamos de enchufar, luego tenemos que pasar nuestros discos de discos básicos a discos dinamicos. Para ello pinchamos con el botón derecho sobre uno de los discos y pinchamos sobre convertir en disco dinamico.

5- nos aparecerá una ventana en la que como vemos podemos seleccionar los discos que queremos pasar a disco dinamico, seleccionamos el disco 1 y le damos a aceptar.

6- nos aparecerá una ventana en la que nos detalla la información anteriormente seleccionada, pulsamos en convertir.

7- nos pedirá confirmación de que deseamos convertir en discos dinamicos le decimos que “si”

8- posteriormente nos pedirá reinicio indicamos que si y una vez reiniciado volvemos a la consola donde administramos los discos y vamos a proceder a crear el volumen reflejado, para hacerlo pinchamos con el botón derecho en el espacio sin asignar de uno de los discos dinámicos en los que desea crear el volumen reflejado y, después, haga clic en Nuevo volumen.

9- en la siguiente pantalla donde se nos presenta el asistente le damos a siguiente, en la siguiente seleccionamos volumen reflejado y pulsamos siguiente.

10- en la siguiente pantalla nos aparecen dos recuadros, en el de la izquierda aparecerá el disco del que queremos hacer espejo, lo seleccionamos y le pinchamos en el botón agregar, luego en siguiente.

11- En la siguiente pantalla indicamos la letra que deseamos que tenga la unidad y pinchamos en siguiente.

12- en la siguiente pantalla seleccionamos las opciones de formato que deseamos y pulsamos en siguiente. Y en la próxima pantalla pulsamos en finalizar.

13- si el disco se rompiera en la ventana de administración de discos pincharíamos sobre el disco con el botón derecho, seleccionamos romper el espejo y cuando añadamos el nuevo disco volvemos a repetir este proceso.

Hay que puntualizar que las mejoras que ofrecen los discos dinamicos solo se pueden hacer usando sistema de archivos NTFS y también que con una partición de sistema Windows solo permite un sistema de discos reflejado.